From be438dd071400936c44a1425ec8d886f63c83329 Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期五, 11 七月 2025 14:33:08 +0800 Subject: [PATCH] 1 --- WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs | 393 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 337 insertions(+), 56 deletions(-) diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs index 7d59493..eb22505 100644 --- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs +++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs @@ -15,6 +15,9 @@ using static WIDESEA_Common.HouseInventoryIn; using WIDESEA_Common; using Parameter = WIDESEA_Common.Parameter; +using WIDESEA_Core.LogHelper; +using WIDESEA_DTO.Task; +using WIDESEA_Core.TaskEnum; namespace WIDESEA_TaskInfoService { @@ -28,75 +31,352 @@ /// <param name="stationCode">璧峰鍦板潃</param> /// <param name="palletCode">鎵樼洏缂栧彿</param> /// <returns>杩斿洖澶勭悊缁撴灉</returns> - public WebResponseContent InboundRequest(SaveModel saveModel) + public WebResponseContent InboundRequest(string stationCode, string roadwayNo, string palletCode) { - string palletCode = saveModel.palletCode; - if (saveModel.palletCode == null) return WebResponseContent.Instance.Error($"璇疯緭鍏ユ纭墭鐩樺彿"); - WebResponseContent content = new WebResponseContent(); + // 杈撳叆楠岃瘉 + if (string.IsNullOrWhiteSpace(palletCode)) + return WebResponseContent.Instance.Error("璇疯緭鍏ユ纭墭鐩樺彿"); + try { - Dt_InboundOrderDetail inboundOrderDet = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.LPNNo == palletCode).First(); - Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderDet.OrderId).Includes(x => x.Details).First(); + Dt_Task task = Repository.QueryFirst(x => x.PalletCode == palletCode); + if (task != null) + { + PushTasksToWCS(new List<Dt_Task> { task }); + return WebResponseContent.Instance.OK($"璇ユ墭鐩樺凡鐢熸垚浠诲姟", _mapper.Map<WMSTaskDTO>(task)); + } + // 鑾峰彇鍏ュ簱鍗曟槑缁� + var inboundOrderDet = GetInboundOrderDetail(palletCode); + if (inboundOrderDet == null) + return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺彿 {palletCode} 瀵瑰簲鐨勫叆搴撳崟鏄庣粏"); + + // 鑾峰彇鍏ュ簱鍗� + var inboundOrder = GetInboundOrder(inboundOrderDet.OrderId); if (inboundOrder == null) - { return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅"); - } - Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId); - Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == warehouse.WarehouseCode); - if (roadwayInfo != null) { } - if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0) - { - return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); - } - Dt_StockInfo stockInfo1 = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); - if (stockInfo1 == null) - { - Dt_StockInfo dt_Stock = new() - { - BatchNo = inboundOrderDet.BatchNo, - PalletCode = palletCode, - IsFull = true, - StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨, - Creater = "WMS", - CreateDate = DateTime.Now, - MaterialType = (int)InventoryMaterialType.鎴愬搧, - Materialweight = 0, - Wlstatus = (int)InventoryMaterialStatus.鍚堟牸, - Mgeneratetime = DateTime.Now, - }; - _stockService.StockInfoService.Repository.AddData(dt_Stock); + // 楠岃瘉鍏ュ簱鍗曟槑缁� + if (inboundOrder.Details == null || inboundOrder.Details.Count == 0) + return WebResponseContent.Instance.Error($"鍏ュ簱鍗� {inboundOrder.OrderNo} 娌℃湁鏄庣粏淇℃伅"); - Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode); - Dt_StockInfoDetail dt_StockInfoDetail = new() - { - StockId = dt_StockInfo.Id, - MaterielCode = inboundOrderDet.MaterielCode, //鐗╂枡鍙� - MaterielName = inboundOrderDet.MaterielName, //鐗╂枡鍚嶇О - OrderNo = inboundOrder.OrderNo, //鐗╂枡璇︽儏 - BatchNo = inboundOrderDet.BatchNo, //鐗╂枡鎵规 - LinId = inboundOrderDet.LinId, //SerialNumber = targetCodes[2].ToString(), //鍖呭彿 - //BatchNoName = dt_Int.OrderNo, - StockQuantity = inboundOrderDet.OrderQuantity, //閲嶉噺 - //OutboundQuantity = 1, //搴忓垪鍙� - Status = (int)StockStatusEmun.缁勭洏鏆傚瓨, - Creater = "WMS", - CreateDate = DateTime.Now, - Id = inboundOrderDet.LinId.ObjToInt(), - }; - _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail); + // 鑾峰彇浠撳簱鍜屽贩閬撲俊鎭� + var warehouse = GetWarehouse(inboundOrder.WarehouseId); + var roadwayInfo = GetRoadwayInfo(warehouse.WarehouseCode); + + // 澶勭悊搴撳瓨淇℃伅 + //var stockInfo = GetOrCreateStockInfo(palletCode, inboundOrder, inboundOrderDet, warehouse); + var dt_StockInfoDetail = new Dt_StockInfoDetail + { + //StockId = stockInfo.Id, + MaterielCode = inboundOrderDet.MaterielCode, + MaterielName = inboundOrderDet.MaterielName, + OrderNo = inboundOrder.OrderNo, + BatchNo = inboundOrderDet.BatchNo, + LinId = inboundOrderDet.LinId, + StockQuantity = inboundOrderDet.OrderQuantity, + Status = (int)StockStatusEmun.缁勭洏鏆傚瓨, + Creater = "WMS", + CreateDate = DateTime.Now, + Id = inboundOrderDet.LinId.ObjToInt(), + }; + + var dt_Stock = new Dt_StockInfo + { + BatchNo = inboundOrderDet.BatchNo, + PalletCode = palletCode, + PalletType = GetPalletType(warehouse, palletCode), + IsFull = true, + StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨, + Creater = "WMS", + CreateDate = DateTime.Now, + MaterialType = (int)InventoryMaterialType.鎴愬搧, + Materialweight = 0, + Wlstatus = (int)InventoryMaterialStatus.鍚堟牸, + Mgeneratetime = DateTime.Now, + WarehouseId = warehouse.WarehouseId, + Details = new List<Dt_StockInfoDetail> { dt_StockInfoDetail } + }; + + // 妫�鏌ュ叆搴撹姹� + var checkResult = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, dt_Stock); + if (!checkResult.Item1) + return WebResponseContent.Instance.Error(checkResult.Item2); + + // 鍒嗛厤搴撲綅骞舵洿鏂版暟鎹� + Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, dt_Stock.PalletType, dt_Stock.WarehouseId); + //Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(stationCode, TaskTypeEnum.Inbound.ObjToInt()); + if (locationInfo == null) + { + return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅"); } - Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); - (bool, string) result = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, stockInfo); - if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2); - content = AssignLocUpdateData(roadwayInfo.InSCStationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo, inboundOrder.OrderNo); + + Dt_Task newTask = new Dt_Task() + { + CurrentAddress = stationCode, + Grade = 0, + NextAddress = locationInfo.LocationCode, + PalletCode = palletCode, + Roadway = roadwayNo, + SourceAddress = stationCode, + TargetAddress = locationInfo.LocationCode, + TaskType = TaskTypeEnum.Inbound.ObjToInt(), + TaskStatus = TaskStatusEnum.New.ObjToInt(), + WarehouseId = dt_Stock.WarehouseId, + PalletType = dt_Stock.PalletType, + Creater = "WMS", + CreateDate = DateTime.Now, + }; + + LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; + _unitOfWorkManage.BeginTran(); + Db.InsertNav(dt_Stock).Include(x => x.Details).ExecuteCommand(); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus.ObjToInt(), LocationStatusEnum.Lock.ObjToInt(), LocationChangeType.InboundAssignLocation.ObjToInt()); + //_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, newTask.PalletType, LocationStatusEnum.Lock, newTask.WarehouseId); + int taskId = BaseDal.AddData(newTask); + newTask.TaskId = taskId; + _stockRepository.StockInfoRepository.UpdateData(dt_Stock); + _unitOfWorkManage.CommitTran(); + WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask); + + PushTasksToWCS(new List<Dt_Task> { newTask }); + if (newTask.WarehouseId == 5) PutFinish(stationCode); + return WebResponseContent.Instance.OK(data: wMSTaskDTO); } catch (Exception ex) { - content = WebResponseContent.Instance.Error(ex.Message); + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); } - return content; } + + private Dt_InboundOrderDetail GetInboundOrderDetail(string palletCode) + { + return BaseDal.Db.Queryable<Dt_InboundOrderDetail>() + .Where(x => x.LPNNo == palletCode) + .First(); + } + + private Dt_InboundOrder GetInboundOrder(int orderId) + { + return BaseDal.Db.Queryable<Dt_InboundOrder>() + .Where(x => x.Id == orderId) + .Includes(x => x.Details) + .First(); + } + + private Dt_Warehouse GetWarehouse(int warehouseId) + { + return _basicService.WarehouseService.Repository + .QueryFirst(x => x.WarehouseId == warehouseId); + } + + private Dt_RoadwayInfo GetRoadwayInfo(string warehouseCode) + { + return _basicService.RoadwayInfoService.Repository + .QueryFirst(x => x.RoadwayNo == warehouseCode); + } + + private Dt_StockInfo GetOrCreateStockInfo(string palletCode, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet, Dt_Warehouse warehouse) + { + var stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>() + .Where(x => x.PalletCode == palletCode) + .Includes(x => x.Details) + .First(); + decimal beforeQuantity = 0; + if (stockInfo == null) + { + stockInfo = CreateNewStockInfo(palletCode, inboundOrder, inboundOrderDet, warehouse); + //CreateStockInfoDetail(stockInfo, inboundOrder, inboundOrderDet); + } + else + { + if (stockInfo.StockStatus != StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt()) + { + return null; + } + beforeQuantity = stockInfo.Details.Sum(x => x.StockQuantity); + } + + return stockInfo; + } + + private Dt_StockInfo CreateNewStockInfo(string palletCode, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet, Dt_Warehouse warehouse) + { + var dt_StockInfoDetail = new Dt_StockInfoDetail + { + //StockId = stockInfo.Id, + MaterielCode = inboundOrderDet.MaterielCode, + MaterielName = inboundOrderDet.MaterielName, + OrderNo = inboundOrder.OrderNo, + BatchNo = inboundOrderDet.BatchNo, + LinId = inboundOrderDet.LinId, + StockQuantity = inboundOrderDet.OrderQuantity, + Status = (int)StockStatusEmun.缁勭洏鏆傚瓨, + Creater = "WMS", + CreateDate = DateTime.Now, + Id = inboundOrderDet.LinId.ObjToInt(), + }; + + var dt_Stock = new Dt_StockInfo + { + BatchNo = inboundOrderDet.BatchNo, + PalletCode = palletCode, + PalletType = GetPalletType(warehouse, palletCode), + IsFull = true, + StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨, + Creater = "WMS", + CreateDate = DateTime.Now, + MaterialType = (int)InventoryMaterialType.鎴愬搧, + Materialweight = 0, + Wlstatus = (int)InventoryMaterialStatus.鍚堟牸, + Mgeneratetime = DateTime.Now, + WarehouseId = warehouse.WarehouseId, + Details = new List<Dt_StockInfoDetail> { dt_StockInfoDetail } + }; + + //_stockService.StockInfoService.Repository.AddData(dt_Stock); + Db.InsertNav(dt_Stock).Include(x => x.Details).ExecuteCommand(); + return _stockService.StockInfoService.Repository.GetStockInfo(palletCode); + } + + private void CreateStockInfoDetail(Dt_StockInfo stockInfo, Dt_InboundOrder inboundOrder, Dt_InboundOrderDetail inboundOrderDet) + { + var dt_StockInfoDetail = new Dt_StockInfoDetail + { + StockId = stockInfo.Id, + MaterielCode = inboundOrderDet.MaterielCode, + MaterielName = inboundOrderDet.MaterielName, + OrderNo = inboundOrder.OrderNo, + BatchNo = inboundOrderDet.BatchNo, + LinId = inboundOrderDet.LinId, + StockQuantity = inboundOrderDet.OrderQuantity, + Status = (int)StockStatusEmun.缁勭洏鏆傚瓨, + Creater = "WMS", + CreateDate = DateTime.Now, + Id = inboundOrderDet.LinId.ObjToInt(), + }; + + _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail); + } + + //鏌ヨ浠撳簱鎵樼洏璐х墿绫诲瀷 + public int GetPalletType(Dt_Warehouse warehouse, string palletCode) + { + if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ToString()) + { + if (palletCode.Substring(0, 1) == "6") + { + return PalletTypeEnum.MediumPallet.ObjToInt(); + } + else + { + return PalletTypeEnum.LargestPallet.ObjToInt(); + } + } + else if (warehouse.WarehouseCode == WarehouseEnum.SC01_BC.ObjToString()) + { + Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 1)); + if (palletTypeInfo == null) + { + throw new Exception($"鎵樼洏鍙烽敊璇�"); + } + return palletTypeInfo.PalletType; + } + //else if (warehouse.WarehouseCode == WarehouseEnum.HA152.ObjToString()) + //{ + // Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 2)); + // if (palletTypeInfo == null) + // { + // throw new Exception($"鎵樼洏鍙烽敊璇�"); + // } + // return palletTypeInfo.PalletType; + //} + //else if (warehouse.WarehouseCode == WarehouseEnum.HA57.ObjToString()) + //{ + // Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.CodeStartStr == palletCode.Substring(0, 3)); + // if (palletTypeInfo == null) + // { + // throw new Exception($"鎵樼洏鍙烽敊璇�"); + // } + // return palletTypeInfo.PalletType; + //} + return -1; + } + + + + + #region + //public WebResponseContent InboundRequest(SaveModel saveModel) + //{ + // string palletCode = saveModel.palletCode; + // if (saveModel.palletCode == null) return WebResponseContent.Instance.Error($"璇疯緭鍏ユ纭墭鐩樺彿"); + // WebResponseContent content = new WebResponseContent(); + // try + // { + // Dt_InboundOrderDetail inboundOrderDet = BaseDal.Db.Queryable<Dt_InboundOrderDetail>().Where(x => x.LPNNo == palletCode).First(); + // Dt_InboundOrder inboundOrder = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.Id == inboundOrderDet.OrderId).Includes(x => x.Details).First(); + // if (inboundOrder == null) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟淇℃伅"); + // } + // Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == inboundOrder.WarehouseId); + // Dt_RoadwayInfo roadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.RoadwayNo == warehouse.WarehouseCode); + // if (roadwayInfo != null) { } + + // if (inboundOrder.Details == null || inboundOrder.Details.Count <= 0) + // { + // return WebResponseContent.Instance.Error($"鏈壘鍒板叆搴撳崟鏄庣粏淇℃伅"); + // } + // Dt_StockInfo stockInfo1 = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); + // if (stockInfo1 == null) + // { + // Dt_StockInfo dt_Stock = new() + // { + // BatchNo = inboundOrderDet.BatchNo, + // PalletCode = palletCode, + // IsFull = true, + // StockStatus = (int)StockStatusEmun.缁勭洏鏆傚瓨, + // Creater = "WMS", + // CreateDate = DateTime.Now, + // MaterialType = (int)InventoryMaterialType.鎴愬搧, + // Materialweight = 0, + // Wlstatus = (int)InventoryMaterialStatus.鍚堟牸, + // Mgeneratetime = DateTime.Now, + // }; + // _stockService.StockInfoService.Repository.AddData(dt_Stock); + + // Dt_StockInfo dt_StockInfo = _stockService.StockInfoService.Repository.GetStockInfo(palletCode); + // Dt_StockInfoDetail dt_StockInfoDetail = new() + // { + // StockId = dt_StockInfo.Id, + // MaterielCode = inboundOrderDet.MaterielCode, //鐗╂枡鍙� + // MaterielName = inboundOrderDet.MaterielName, //鐗╂枡鍚嶇О + // OrderNo = inboundOrder.OrderNo, //鐗╂枡璇︽儏 + // BatchNo = inboundOrderDet.BatchNo, //鐗╂枡鎵规 + // LinId = inboundOrderDet.LinId, //SerialNumber = targetCodes[2].ToString(), //鍖呭彿 + // //BatchNoName = dt_Int.OrderNo, + // StockQuantity = inboundOrderDet.OrderQuantity, //閲嶉噺 + // //OutboundQuantity = 1, //搴忓垪鍙� + // Status = (int)StockStatusEmun.缁勭洏鏆傚瓨, + // Creater = "WMS", + // CreateDate = DateTime.Now, + // Id = inboundOrderDet.LinId.ObjToInt(), + // }; + // _stockService.StockInfoDetailService.Repository.AddData(dt_StockInfoDetail); + // } + // Dt_StockInfo stockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); + // (bool, string) result = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, stockInfo); + // if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2); + // content = AssignLocUpdateData(roadwayInfo.InSCStationCode, TaskTypeEnum.Inbound.ObjToInt(), palletCode, true, stockInfo, inboundOrder.OrderNo); + // } + // catch (Exception ex) + // { + // content = WebResponseContent.Instance.Error(ex.Message); + // } + // return content; + //} + #endregion public string ReceiveWMSInventoryIn = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSInventoryIn"]; /// <summary> /// 鐩樼偣宸紓鏁伴噺鍥炰紶 @@ -290,6 +570,7 @@ return (true, "鎴愬姛"); } + /// <summary> /// 鏍规嵁鎵樼洏鏉$爜锛岃捣鐐逛綅缃紝鐢熸垚鍏ュ簱淇℃伅 /// </summary> -- Gitblit v1.9.3