From 9fbe84cf2c8cc213b209ae9b68001950cd00b730 Mon Sep 17 00:00:00 2001 From: liuwf Date: Sat, 7 Sep 2024 14:25:45 +0800 Subject: [PATCH] =?UTF-8?q?add-=E4=BF=AE=E6=94=B9CTU=E7=A7=BB=E5=BA=93?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=A7=BB=E5=BA=93=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Khd.Core.Domain/Models/WmsMove.cs | 120 ++++ src/Khd.Core.Domain/Models/WmsMoveDetail .cs | 92 +++ .../DefaultDbContext.cs | 2 + src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs | 522 +++++++++++------- src/Khd.Core.Wpf/Form/FormBoardT.xaml | 88 +-- src/Khd.Core.Wpf/Form/FormBoardT.xaml.cs | 133 ++++- 6 files changed, 682 insertions(+), 275 deletions(-) create mode 100644 src/Khd.Core.Domain/Models/WmsMove.cs create mode 100644 src/Khd.Core.Domain/Models/WmsMoveDetail .cs diff --git a/src/Khd.Core.Domain/Models/WmsMove.cs b/src/Khd.Core.Domain/Models/WmsMove.cs new file mode 100644 index 0000000..33bc6a4 --- /dev/null +++ b/src/Khd.Core.Domain/Models/WmsMove.cs @@ -0,0 +1,120 @@ + +//----------------------------------------------------------------------- +// +// * Copyright (C) 2021 KEHAIDASOFT All Rights Reserved +// * version : 4.0.30319.42000 +// * author : khd by t4-2 +// +//----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Models +{ + + [Table("wms_move")] + public class WmsMove + { + [Key] + [Column("move_id")] + public long MoveId { get; set; } + + [Required] + [Column("task_code")] + [MaxLength(128)] + public string TaskCode { get; set; } + + [Required] + [Column("warehouse_id")] + public long WarehouseId { get; set; } + + [Required] + [Column("ori_location_code")] + [MaxLength(64)] + public string OriLocationCode { get; set; } + + [Required] + [Column("target_location_code")] + [MaxLength(64)] + public string TargetLocationCode { get; set; } + + [Column("instock_batch")] + [MaxLength(64)] + public string InstockBatch { get; set; } + + [Column("material_id")] + public long? MaterialId { get; set; } + + [Column("plan_amount")] + public decimal? PlanAmount { get; set; } + + [Column("real_outstock_amount")] + public decimal RealOutstockAmount { get; set; } = 0.000000m; + + [Column("real_instock_amount")] + public decimal RealInstockAmount { get; set; } = 0.000000m; + + [Required] + [Column("operation_type")] + [MaxLength(1)] + public string OperationType { get; set; } + + [Required] + [Column("move_way")] + [MaxLength(1)] + public string MoveWay { get; set; } + + [Required] + [Column("move_type")] + [MaxLength(1)] + public string MoveType { get; set; } + + [Column("apply_reason")] + [MaxLength(500)] + public string ApplyReason { get; set; } + + [Column("audit_reason")] + [MaxLength(500)] + public string AuditReason { get; set; } + + [Required] + [Column("audit_status")] + [MaxLength(1)] + public string AuditStatus { get; set; } + + [Required] + [Column("execute_status")] + [MaxLength(1)] + public string ExecuteStatus { get; set; } + + [Column("apply_by")] + [MaxLength(64)] + public string ApplyBy { get; set; } + + [Column("apply_date")] + public DateTime? ApplyDate { get; set; } + + [Column("audit_by")] + [MaxLength(64)] + public string AuditBy { get; set; } + + [Column("audit_date")] + public DateTime? AuditDate { get; set; } + + [Column("update_by")] + [MaxLength(64)] + public string UpdateBy { get; set; } + + [Column("update_date")] + public DateTime? UpdateDate { get; set; } + + [Column("begin_time")] + public DateTime? BeginTime { get; set; } + + [Column("end_time")] + public DateTime? EndTime { get; set; } + } +} + diff --git a/src/Khd.Core.Domain/Models/WmsMoveDetail .cs b/src/Khd.Core.Domain/Models/WmsMoveDetail .cs new file mode 100644 index 0000000..4291ce8 --- /dev/null +++ b/src/Khd.Core.Domain/Models/WmsMoveDetail .cs @@ -0,0 +1,92 @@ + +//----------------------------------------------------------------------- +// +// * Copyright (C) 2021 KEHAIDASOFT All Rights Reserved +// * version : 4.0.30319.42000 +// * author : khd by t4-2 +// +//----------------------------------------------------------------------- + +using System; +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Khd.Core.Domain.Models +{ + + [Table("wms_move_detail")] + public class WmsMoveDetail + { + [Key] + [Column("move_detail_id")] + public long MoveDetailId { get; set; } + + [Required] + [Column("move_id")] + public long MoveId { get; set; } + + [Column("material_barcode")] + [MaxLength(64)] + public string? MaterialBarcode { get; set; } + + [Column("instock_batch")] + [MaxLength(64)] + public string? InstockBatch { get; set; } + + [Required] + [Column("material_id")] + public long MaterialId { get; set; } + + [Column("location_code")] + [MaxLength(64)] + public string? LocationCode { get; set; } + + [Required] + [Column("plan_amount")] + public decimal PlanAmount { get; set; } + + [Column("real_amount")] + public decimal? RealAmount { get; set; } + + [Column("real_instock_amount")] + public decimal? RealInstockAmount { get; set; } + + [Required] + [Column("execute_status")] + [MaxLength(1)] + public string ExecuteStatus { get; set; } + + [Column("execute_person")] + [MaxLength(64)] + public string? ExecutePerson { get; set; } + + [Column("execute_time")] + public DateTime? ExecuteTime { get; set; } + + [Column("execute_end_time")] + public DateTime? ExecuteEndTime { get; set; } + + [Column("machine_name")] + [MaxLength(64)] + public string? MachineName { get; set; } + + [Column("create_by")] + [MaxLength(64)] + public string? CreateBy { get; set; } + + [Column("create_date")] + public DateTime? CreateDate { get; set; } + + [Column("update_by")] + [MaxLength(64)] + public string? UpdateBy { get; set; } + + [Column("update_date")] + public DateTime? UpdateDate { get; set; } + + [Column("active_flag")] + [MaxLength(1)] + public string? ActiveFlag { get; set; } + } +} + diff --git a/src/Khd.Core.EntityFramework/DefaultDbContext.cs b/src/Khd.Core.EntityFramework/DefaultDbContext.cs index 2e72f73..6051089 100644 --- a/src/Khd.Core.EntityFramework/DefaultDbContext.cs +++ b/src/Khd.Core.EntityFramework/DefaultDbContext.cs @@ -19,6 +19,8 @@ namespace Khd.Core.EntityFramework public DbSet WmsInventoryCheckDetail { get; set; } public DbSet MesBaseMaterialInfo { get; set; } public DbSet WmsRawReturn { get; set; } + public DbSet WmsMove { get; set; } + public DbSet WmsMoveDetail { get; set; } public DbSet WmsRawReturnDetail { get; set; } public DbSet WcsTaskManual { get; set; } public DbSet BaseDictionary { get; set; } diff --git a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs index 72f19eb..8f6b150 100644 --- a/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs +++ b/src/Khd.Core.Wcs/Wcs/CreateTaskByRecord.cs @@ -943,14 +943,19 @@ namespace Khd.Core.Wcs.Wcs var wmsRawStocks = dbContext.WmsRawStock .Where(t => t.saleOrderId == (wmsRawOutstock.saleOrderId == null ? 0 : wmsRawOutstock.saleOrderId)) .Where(t => t.warehouseId == 311) - .ToList(); + .Where(t => t.materialId == wmsRawOutstock.materialId) + .Where(t => t.totalAmount > t.frozenAmount) + .ToList(); + var wmsRawStockLocations = wmsRawStocks.Select(x => x.locationCode).ToList(); var AllWmsBaseLocations = dbContext.WmsBaseLocation .Where(t => t.activeFlag == "1") .Where(t => t.delFlag == "0") .Where(t => t.locationScrapType == "1") - .Where(t => t.warehouseId == 311).ToList(); + .Where(t => t.warehouseId == 311) + .Where(t => t.locationStatus == "1").ToList(); var wmsBaseLocations = AllWmsBaseLocations .Where(t => t.warehouseId == 311) + .Where(t => wmsRawStockLocations.Contains(t.locationCode)) .ToList(); var bill = from a in wmsBaseLocations from b in wmsRawStocks @@ -961,196 +966,207 @@ namespace Khd.Core.Wcs.Wcs bill = bill.OrderBy(t => t.b.instockDate.Value.Date);//按某个时间段 foreach (var item in bill) { - var fistbill = bill.First(); - if (fistbill != null) + // 目标库位 + var fistbill = item; + + int? locRow = 0; + if (fistbill.a.locRow % 2 == 1) { - int? locRow = 0; - if (fistbill.a.locRow % 2 == 1) + locRow = fistbill.a.locRow + 1; + } + else + { + locRow = fistbill.a.locRow - 1; + } + wmsBaseLocation = fistbill.a; + + // 目标库位处于深库位,判断是否需要移库浅库位 + if (wmsBaseLocation.locDeep == 1) + { + int? row = 0; + if (wmsBaseLocation.locRow % 2 == 1) { - locRow = fistbill.a.locRow + 1; + row = wmsBaseLocation.locRow + 1; } else { - locRow = fistbill.a.locRow - 1; + row = wmsBaseLocation.locRow - 1; } - - var lastbill = bill.Where(t => t.a.locRow == locRow) - .Where(t => t.a.locColumn == fistbill.a.locColumn) - .Where(t => t.a.locDeep == 2) - .FirstOrDefault(); - wmsBaseLocation = fistbill.a; - if (lastbill != null) + + var lowLocationBill = bill.Where(t => t.a.locRow == locRow).Where(t => t.a.locColumn == wmsBaseLocation.locColumn).Where(t => t.a.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); + if (lowLocationBill != null) { - if (lastbill.b.instockDate != null && fistbill.b.instockDate != null) + //对应的浅库位满足条件,直接出浅库位 + wmsBaseLocation = lowLocationBill.a; + } + else + { + //目标出库库位对应的浅库位 + WmsBaseLocation? fromBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) + .Where(t => t.locColumn == wmsBaseLocation.locColumn) + .Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); + if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode)&& fromBaseLocation.locationStatus=="1") { - if (wmsBaseLocation.locDeep == 1) + // 浅库位有库存 + WmsRawStock? wmsRawStock1 = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); + if (wmsRawStock1 != null) { - int? row = 0; - if (wmsBaseLocation.locRow % 2 == 1) + #region 找寻移库目标库位 + // 寻找移库目的库位 + WmsBaseLocation? toLocation = null; + + var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == fromBaseLocation.warehouseId) + .Where(t => t.warehouseId != fromBaseLocation.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode)).OrderBy(t => t.locDeep).ToList(); + + foreach (WmsBaseLocation itemLocation in moveLocationList) { - row = wmsBaseLocation.locRow + 1; - } - else - { - row = wmsBaseLocation.locRow - 1; - } - var lowLocationBill = bill.Where(t => t.a.locRow == locRow).Where(t => t.a.locColumn == wmsBaseLocation.locColumn).Where(t => t.a.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); - if (lowLocationBill != null) - { - wmsBaseLocation = lowLocationBill.a; - } - else - { - WmsBaseLocation? fromBaseLocation = AllWmsBaseLocations.Where(t => t.locRow == row) - .Where(t => t.locColumn == wmsBaseLocation.locColumn) - .Where(t => t.warehouseId == wmsBaseLocation.warehouseId).FirstOrDefault(); - if (fromBaseLocation != null && !string.IsNullOrEmpty(fromBaseLocation.containerCode)) + + if (itemLocation.locDeep == 1) { - WmsRawStock? wmsRawStock1 = dbContext.WmsRawStock.FirstOrDefault(t => t.locationCode == fromBaseLocation.locationCode); - if (wmsRawStock1 != null) + bool hasLocation = AllWmsBaseLocations + .Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1))) + .Where(t => t.locColumn == itemLocation.locColumn) + .Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode)) + .Any(); + if (!hasLocation) { - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .Where(t => t.locColumn > wmsBaseLocation.locColumn) - .OrderBy(t => t.locColumn) - .FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .Where(t => t.locColumn < wmsBaseLocation.locColumn) - .OrderByDescending(t => t.locColumn) - .FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == wmsBaseLocation.warehouseId) - .Where(t => t.warehouseId != wmsBaseLocation.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); - if (toLocation != null) - { - if (toLocation.locDeep == 1) - { - bool hasLocation = AllWmsBaseLocations - .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) - .Where(t => t.locColumn == toLocation.locColumn) - .Any(); - if (!hasLocation) - { - Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); - continue; - } - } - var RemoveTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - taskType = StaticTaskType.ThirdRemove, - containerNo = wmsRawStock1.palletInfoCode, - createBy = "WCS", - createTime = DateTime.Now.AddSeconds(-10), - taskStatus = 0, - currPointId = fromBaseLocation.locationId, - currPointNo = fromBaseLocation.locationCode, - nextPointId = baseEquip.objid, - nextPointNo = baseEquip.equipNo, - endPointId = toLocation.locationId, - endPointNo = toLocation.locationCode, - equipmentNo = baseEquip.equipNo, - useFlag = 1, - qty = 1 - }; - SystemData.LockOutLocation(toLocation, dbContext); - SystemData.LockOutLocation(fromBaseLocation, dbContext); - toLocation.locationStatus = "4"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - fromBaseLocation.updateBy = "WCS"; - fromBaseLocation.updateTime = DateTime.Now; - fromBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(fromBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); - } - else - { - continue; - } + Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + continue; } else { - continue; + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; } + } + else + { + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } + } - } - } - } - if (wmsBaseLocation != null) - { - wmsRawStock = wmsRawStocks.Where(t => t.locationCode == wmsBaseLocation.locationCode).First(); - MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawStock.palletInfoCode); - if (mesBasePalletInfo != null) - { - MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); - if (mesBaseBarcodeInfo != null) - { - WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail() + if (toLocation == null) { - rawOutstockDetailId = StaticData.SnowId.NextId(), - createBy = "WCS", - createDate = DateTime.Now, - executeStatus = "0", - erpAmount = 0, - erpStatus = "0", - instockBatch = mesBaseBarcodeInfo.batchCode, - stackAmount = 1, - locationCode = wmsBaseLocation.locationCode, - rawOutstockId = wmsRawOutstock.rawOutstockId, - planAmount = 1, - outstockWay = "2", - outstockPerson = "WCS", - outstockTime = DateTime.Now, - materialProductionDate = mesBaseBarcodeInfo.productionDate, - materialBarcode = mesBasePalletInfo.materialBarcode, - materialId = wmsRawOutstock.materialId, - machineName = mesBaseBarcodeInfo.machineName, - outstockAmount = 1, - taskCode = wmsRawOutstock.taskCode - }; - wcsTask = new WcsTask() + // 找寻下一个可出库库存 + continue; + } + + var RemoveTask = new WcsTask() { objid = StaticData.SnowId.NextId(), - orderId = wmsRawOutstock.rawOutstockId, - taskType = StaticTaskType.ThirdRawToFlip, - containerNo = wmsRawStock.palletInfoCode, + taskType = StaticTaskType.ThirdRemove, + containerNo = wmsRawStock1.palletInfoCode, createBy = "WCS", - createTime = DateTime.Now, + createTime = DateTime.Now.AddSeconds(-10), taskStatus = 0, - materialId = wmsRawOutstock.materialId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, + currPointId = fromBaseLocation.locationId, + currPointNo = fromBaseLocation.locationCode, nextPointId = baseEquip.objid, nextPointNo = baseEquip.equipNo, - endPointId = endEquip.objid, - endPointNo = endEquip.equipNo, - equipmentNo = endEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = baseEquip.equipNo, useFlag = 1, qty = 1 }; - SystemData.LockOutLocation(wmsBaseLocation, dbContext); - wmsBaseLocation.locationStatus = "6"; - dbContext.Update(wmsBaseLocation); - dbContext.Add(wmsRawOutstockDetail); - WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); - dbContext.Remove(wcsTaskManual); - dbContext.Add(wcsTask); + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(fromBaseLocation, dbContext); + toLocation.locationStatus = "4"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + fromBaseLocation.updateBy = "WCS"; + fromBaseLocation.updateTime = DateTime.Now; + fromBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(fromBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); dbContext.Add(wcsTaskLog); - dbContext.SaveChanges(); + #endregion + + } + + } + else + { + //浅库位状态异常,找寻下一个可出库库存 + continue; } } } + + if (wmsBaseLocation != null) + { + wmsRawStock = wmsRawStocks.Where(t => t.locationCode == wmsBaseLocation.locationCode).First(); + MesBasePalletInfo? mesBasePalletInfo = dbContext.MesBasePalletInfo.FirstOrDefault(t => t.palletInfoCode == wmsRawStock.palletInfoCode); + if (mesBasePalletInfo != null) + { + MesBaseBarcodeInfo? mesBaseBarcodeInfo = dbContext.MesBaseBarcodeInfo.FirstOrDefault(t => t.barcodeInfo == mesBasePalletInfo.materialBarcode); + if (mesBaseBarcodeInfo != null) + { + WmsRawOutstockDetail wmsRawOutstockDetail = new WmsRawOutstockDetail() + { + rawOutstockDetailId = StaticData.SnowId.NextId(), + createBy = "WCS", + createDate = DateTime.Now, + executeStatus = "0", + erpAmount = 0, + erpStatus = "0", + instockBatch = mesBaseBarcodeInfo.batchCode, + stackAmount = 1, + locationCode = wmsBaseLocation.locationCode, + rawOutstockId = wmsRawOutstock.rawOutstockId, + planAmount = 1, + outstockWay = "2", + outstockPerson = "WCS", + outstockTime = DateTime.Now, + materialProductionDate = mesBaseBarcodeInfo.productionDate, + materialBarcode = mesBasePalletInfo.materialBarcode, + materialId = wmsRawOutstock.materialId, + machineName = mesBaseBarcodeInfo.machineName, + outstockAmount = 1, + taskCode = wmsRawOutstock.taskCode + }; + wcsTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = wmsRawOutstock.rawOutstockId, + taskType = StaticTaskType.ThirdRawToFlip, + containerNo = wmsRawStock.palletInfoCode, + createBy = "WCS", + createTime = DateTime.Now, + taskStatus = 0, + materialId = wmsRawOutstock.materialId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = baseEquip.objid, + nextPointNo = baseEquip.equipNo, + endPointId = endEquip.objid, + endPointNo = endEquip.equipNo, + equipmentNo = endEquip.equipNo, + useFlag = 1, + qty = 1 + }; + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + wmsBaseLocation.locationStatus = "6"; + dbContext.Update(wmsBaseLocation); + dbContext.Add(wmsRawOutstockDetail); + WcsTaskLog wcsTaskLog = CoreMapper.Map(wcsTask); + dbContext.Remove(wcsTaskManual); + dbContext.Add(wcsTask); + dbContext.Add(wcsTaskLog); + dbContext.SaveChanges(); + } + } + } + } } } @@ -1343,29 +1359,34 @@ namespace Khd.Core.Wcs.Wcs } else { - WmsBaseLocation? wmsBaseLocation = AllWmsBaseLocations.Where(t => t.locRow == row) + // 外侧浅库位 + WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) .Where(t => t.locColumn == location.locColumn) .Where(t => t.warehouseId == location.warehouseId).FirstOrDefault(); - if (wmsBaseLocation != null && !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") + if ( !string.IsNullOrEmpty(wmsBaseLocation.containerCode) && wmsBaseLocation.locationStatus == "1") { + WmsProductStock? wmsProductStock = dbContext.WmsProductStock.FirstOrDefault(t => t.locationCode == wmsBaseLocation.locationCode); if (wmsProductStock != null) { - WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.locDeep == 1) - .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); - toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) - .Where(t => t.warehouseId != location.locationId) - .Where(t => string.IsNullOrEmpty(t.containerCode)) - .FirstOrDefault(); + #region 找寻移库目标库位 + + WmsBaseLocation? toLocation = null; - if (toLocation != null) + + var moveLocationList = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + .Where(t => t.warehouseId != location.locationId) + .Where(t => string.IsNullOrEmpty(t.containerCode) && t.locationStatus == "1").OrderBy(t => t.locDeep).ToList(); + + foreach (WmsBaseLocation itemLocation in moveLocationList) { - if (toLocation.locDeep == 1) + + if (itemLocation.locDeep == 1) { bool hasLocation = AllWmsBaseLocations - .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) - .Where(t => t.locColumn == toLocation.locColumn) + .Where(t => t.locRow == (itemLocation.locRow % 2 == 1 ? (itemLocation.locRow + 1) : (itemLocation.locRow - 1))) + .Where(t => t.locColumn == itemLocation.locColumn) + .Where(t => t.locationStatus == "1" && string.IsNullOrEmpty(t.containerCode)) .Any(); if (!hasLocation) { @@ -1373,53 +1394,130 @@ namespace Khd.Core.Wcs.Wcs _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); continue; } - } - var RemoveTask = new WcsTask() - { - objid = StaticData.SnowId.NextId(), - orderId = item.productOutstockId, - taskType = StaticTaskType.FiveRemove, - containerNo = wmsProductStock.palletInfoCode, - createBy = "WCS", - createTime = DateTime.Now.AddSeconds(-10), - taskStatus = 0, - materialId = item.productId, - currPointId = wmsBaseLocation.locationId, - currPointNo = wmsBaseLocation.locationCode, - nextPointId = agvEquip.objid, - nextPointNo = agvEquip.equipNo, - endPointId = toLocation.locationId, - endPointNo = toLocation.locationCode, - equipmentNo = agvEquip.equipNo, - useFlag = 1, - qty = 1 - }; - SystemData.LockOutLocation(toLocation, dbContext); - SystemData.LockOutLocation(wmsBaseLocation, dbContext); + else + { + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } + + } + else + { + // 找到可以移库的目标库位 + toLocation = itemLocation; + break; + } - toLocation.locationStatus = "4"; - toLocation.updateBy = "WCS"; - toLocation.updateTime = DateTime.Now; - wmsBaseLocation.updateBy = "WCS"; - wmsBaseLocation.updateTime = DateTime.Now; - wmsBaseLocation.locationStatus = "4"; - dbContext.Update(toLocation); - dbContext.Update(wmsBaseLocation); - dbContext.Add(RemoveTask); - WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); - dbContext.Add(wcsTaskLog); } - else + if (toLocation == null) { + // 找寻下一个可出库库存 continue; } + var RemoveTask = new WcsTask() + { + objid = StaticData.SnowId.NextId(), + orderId = item.productOutstockId, + taskType = StaticTaskType.SecondRemove, + containerNo = wmsBaseLocation.containerCode, + createBy = "WCS", + createTime = DateTime.Now.AddSeconds(-10), + taskStatus = 0, + materialId = item.productId, + currPointId = wmsBaseLocation.locationId, + currPointNo = wmsBaseLocation.locationCode, + nextPointId = agvEquip.objid, + nextPointNo = agvEquip.equipNo, + endPointId = toLocation.locationId, + endPointNo = toLocation.locationCode, + equipmentNo = agvEquip.equipNo, + useFlag = 1, + qty = 1 + }; + SystemData.LockOutLocation(toLocation, dbContext); + SystemData.LockOutLocation(wmsBaseLocation, dbContext); + toLocation.locationStatus = "4"; + toLocation.updateBy = "WCS"; + toLocation.updateTime = DateTime.Now; + wmsBaseLocation.updateBy = "WCS"; + wmsBaseLocation.updateTime = DateTime.Now; + wmsBaseLocation.locationStatus = "4"; + dbContext.Update(toLocation); + dbContext.Update(wmsBaseLocation); + dbContext.Add(RemoveTask); + WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + dbContext.Add(wcsTaskLog); + #endregion + //WmsBaseLocation? toLocation = AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + // .Where(t => t.locDeep == 1) + // .Where(t => string.IsNullOrEmpty(t.containerCode)).FirstOrDefault(); + //toLocation ??= AllWmsBaseLocations.Where(t => t.warehouseId == location.warehouseId) + // .Where(t => t.warehouseId != location.locationId) + // .Where(t => string.IsNullOrEmpty(t.containerCode)) + // .FirstOrDefault(); + + //if (toLocation != null) + //{ + // if (toLocation.locDeep == 1) + // { + // bool hasLocation = AllWmsBaseLocations + // .Where(t => t.locRow == (toLocation.locRow % 2 == 1 ? (toLocation.locRow + 1) : (toLocation.locRow - 1))) + // .Where(t => t.locColumn == toLocation.locColumn) + // .Any(); + // if (!hasLocation) + // { + // Console.WriteLine(DateTime.Now + $":目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + // _logger.Info($"目标库位{toLocation.locationCode}的浅库位库位状态异常,无法移库"); + // continue; + // } + // } + // var RemoveTask = new WcsTask() + // { + // objid = StaticData.SnowId.NextId(), + // orderId = item.productOutstockId, + // taskType = StaticTaskType.FiveRemove, + // containerNo = wmsProductStock.palletInfoCode, + // createBy = "WCS", + // createTime = DateTime.Now.AddSeconds(-10), + // taskStatus = 0, + // materialId = item.productId, + // currPointId = wmsBaseLocation.locationId, + // currPointNo = wmsBaseLocation.locationCode, + // nextPointId = agvEquip.objid, + // nextPointNo = agvEquip.equipNo, + // endPointId = toLocation.locationId, + // endPointNo = toLocation.locationCode, + // equipmentNo = agvEquip.equipNo, + // useFlag = 1, + // qty = 1 + // }; + // SystemData.LockOutLocation(toLocation, dbContext); + // SystemData.LockOutLocation(wmsBaseLocation, dbContext); + + // toLocation.locationStatus = "4"; + // toLocation.updateBy = "WCS"; + // toLocation.updateTime = DateTime.Now; + // wmsBaseLocation.updateBy = "WCS"; + // wmsBaseLocation.updateTime = DateTime.Now; + // wmsBaseLocation.locationStatus = "4"; + // dbContext.Update(toLocation); + // dbContext.Update(wmsBaseLocation); + // dbContext.Add(RemoveTask); + // WcsTaskLog wcsTaskLog = CoreMapper.Map(RemoveTask); + // dbContext.Add(wcsTaskLog); + //} + //else + //{ + // continue; + //} } else { continue; } } - else if (wmsBaseLocation != null && wmsBaseLocation.locationStatus != "1") + else { Console.WriteLine(DateTime.Now + $":{wmsBaseLocation.locationCode}库位状态异常,无法移库"); _logger.Info($"{wmsBaseLocation.locationCode}库位状态异常,无法移库"); @@ -1529,7 +1627,9 @@ namespace Khd.Core.Wcs.Wcs //获取最早入库时间 foreach (var item in proOutStock) { - + task = dbContext.WcsTask.Where(t => t.nextPointId == 8 && t.taskStatus <= 7).Any(); + if (task) break; + var wmsproStocks = proStock .Where(t => t.productId == item.productId && t.saleOrderId == (item.saleOrderId == null ? 0 : item.saleOrderId) && t.warehouseId == item.warehouseId) .Select(t => t.locationCode) @@ -1539,6 +1639,7 @@ namespace Khd.Core.Wcs.Wcs .Where(t => t.delFlag == "0") .Where(t => t.locationScrapType == "1") .Where(t => t.locationStatus == "1") + .Where(t => t.warehouseId == item.warehouseId) .Where(t => t.warehouseId == item.warehouseId).ToList(); var wmsBaseLocations = AllWmsBaseLocations .Where(t => t.warehouseId == item.warehouseId) @@ -1553,7 +1654,7 @@ namespace Khd.Core.Wcs.Wcs dbContext.SaveChanges(); continue; } - + var bill = from a in wmsBaseLocations from b in proStock where a.locationCode == b.locationCode @@ -1591,6 +1692,7 @@ namespace Khd.Core.Wcs.Wcs } else { + // 目标出库库位对应的浅库位 WmsBaseLocation? wmsBaseLocation = dbContext.WmsBaseLocation.Where(t => t.locRow == row) .Where(t => t.locColumn == location.locColumn) diff --git a/src/Khd.Core.Wpf/Form/FormBoardT.xaml b/src/Khd.Core.Wpf/Form/FormBoardT.xaml index ea57f88..3535b2b 100644 --- a/src/Khd.Core.Wpf/Form/FormBoardT.xaml +++ b/src/Khd.Core.Wpf/Form/FormBoardT.xaml @@ -16,11 +16,11 @@ > - - + + - - + + @@ -389,24 +389,24 @@ - - + - - - - + + + + - - + - + @@ -1297,9 +1297,9 @@ - + - + @@ -2099,14 +2099,14 @@ - - - - + + + + - - - + + + @@ -2125,7 +2125,7 @@ - - + @@ -2624,7 +2625,7 @@ - + @@ -2633,7 +2634,7 @@ - + @@ -2641,35 +2642,40 @@ - + - + - + - + - + -