From 734f49c3f74e4a46cfb5892ce60dbf1bb86e74ab Mon Sep 17 00:00:00 2001 From: wankeda <Administrator@DESKTOP-HAU3ST3> Date: 星期二, 22 七月 2025 19:14:39 +0800 Subject: [PATCH] 出入库流程 --- WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs | 200 ++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 163 insertions(+), 37 deletions(-) diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs index eb22505..daf9a9f 100644 --- a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs +++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs @@ -24,6 +24,165 @@ public partial class TaskService { + /// <summary> + /// 浠呯敵璇蜂换鍔★紝璁¦CS鏍规嵁璺敱纭畾涓嬩竴鍦板潃 + /// </summary> + /// <param name="stationCode"></param> + /// <param name="palletCode"></param> + /// <returns></returns> + public WebResponseContent DeviceRequestInboundTaskSimple(string stationCode, string palletCode) + { + try + { + 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)); + } + + if (Repository.QueryFirst(x => x.SourceAddress == stationCode && x.TaskStatus == TaskStatusEnum.New.ObjToInt()) != null) + { + return WebResponseContent.Instance.Error($"璇ョ珯鐐瑰凡鏈夋湭鎵ц鐨勪换鍔�"); + } + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First(); + var details = stockInfo.Details.FirstOrDefault(); + if (stockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒扮粍鐩樹俊鎭�"); + } + if (!string.IsNullOrEmpty(stockInfo.LocationCode)) + { + return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅"); + } + Dt_RoadwayInfo roadwayInfo = _basicRepository.RoadwayInfoRepository.QueryFirst(x => x.InStationCode == stationCode); + if (roadwayInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板垰鍏ュ簱绔欏彴鍦板潃"); + } + Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayInfo.RoadwayNo, stockInfo.PalletType, stockInfo.WarehouseId); + if (locationInfo == null) + { + return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅"); + } + + Dt_Task newTask = new Dt_Task() + { + CurrentAddress = "", + Grade = 0, + NextAddress = stationCode, + PalletCode = palletCode, + OrderNo = details.OrderNo, + Roadway = roadwayInfo.RoadwayNo, + SourceAddress = "", + TargetAddress = locationInfo.LocationCode, + TaskType = TaskTypeEnum.Inbound.ObjToInt(), + TaskStatus = TaskStatusEnum.New.ObjToInt(), + WarehouseId = stockInfo.WarehouseId, + PalletType = stockInfo.PalletType, + Creater = "WCS", + CreateDate = DateTime.Now + }; + string MaterielCode = stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode; + float Quantity = (float)stockInfo.Details?.Where(x => x.StockId == stockInfo.Id).Sum(x => x.StockQuantity); + if (MaterielCode != null && Quantity != null) + { + newTask.MaterielCode = MaterielCode; + newTask.Quantity = (float)Quantity; + } + + //if (stockInfo.StockStatus == StockStatusEmun.鎵嬪姩缁勭洏鏆傚瓨.ObjToInt()) + //{ + // stockInfo.StockStatus = StockStatusEmun.鎵嬪姩缁勭洏鍏ュ簱纭.ObjToInt(); + //} + //else if (stockInfo.StockStatus == StockStatusEmun.MES閫�搴�.ObjToInt()) + //{ + // newTask.TaskType = TaskTypeEnum.MesMatReturn.ObjToInt(); + //} + //else if (stockInfo.StockStatus == StockStatusEmun.MES绌烘墭閫�搴�.ObjToInt()) + //{ + // Dt_PalletTypeInfo palletTypeInfo = _palletTypeInfoRepository.QueryFirst(x => x.WarehouseId == stockInfo.WarehouseId && x.PalletType == stockInfo.PalletType); + // //todo 灏忔墭鐩樻殏鏃舵湭鍚敤 + // if (palletTypeInfo.LocaitonCount == 2) + // { + // newTask.TaskType = TaskTypeEnum.MesPalletLargeReturn.ObjToInt(); + // } + // else + // { + // newTask.TaskType = TaskTypeEnum.MesPalletSmallReturn.ObjToInt(); + // } + //} + //else + //{ + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(); + locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + //} + + _unitOfWorkManage.BeginTran(); + int taskId = BaseDal.AddData(newTask); + newTask.TaskId = taskId; + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + _unitOfWorkManage.CommitTran(); + WMSTaskDTO wMSTaskDTO = _mapper.Map<WMSTaskDTO>(newTask); + + PushTasksToWCS(new List<Dt_Task> { newTask }); + return WebResponseContent.Instance.OK(data: wMSTaskDTO); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 鍏ュ簱浠诲姟鐢宠鍒嗛厤璐т綅 + /// </summary> + /// <param name="taskNum">浠诲姟鍙�</param> + /// <param name="roadwayNo">宸烽亾鍙�</param> + /// <returns></returns> + public WebResponseContent AssignInboundTaskLocation(int taskNum, string roadwayNo) + { + try + { + Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + if (task == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鍏ュ簱浠诲姟"); + } + + if (_basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress) != null) + { + return WebResponseContent.Instance.OK(data: task.TargetAddress); + } + + Dt_LocationInfo? locationInfo = _basicService.LocationInfoService.AssignLocation(roadwayNo, task.PalletType, task.WarehouseId); + if (locationInfo == null) + { + return WebResponseContent.Instance.Error($"璐т綅鍒嗛厤澶辫触,鏈壘鍒板彲鍒嗛厤璐т綅"); + } + + task.Roadway = roadwayNo; + task.TargetAddress = locationInfo.LocationCode; + + task.TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt(); + + + + LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; + + _unitOfWorkManage.BeginTran(); + //_recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation); + //_basicService.LocationInfoService.UpdateLocationStatus(locationInfo, task.PalletType, LocationStatusEnum.Lock, task.WarehouseId); + BaseDal.UpdateData(task); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(data: locationInfo.LocationCode); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + } /// <summary> /// 绔嬪簱鍏ュ簱鎸囦护涓婁紶 @@ -63,40 +222,7 @@ 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 dt_Stock = _stockRepository.StockInfoRepository.QueryFirst(x => x.PalletCode == palletCode); // 妫�鏌ュ叆搴撹姹� var checkResult = CheckRequestInbound(roadwayInfo.InSCStationCode, palletCode, true, dt_Stock); if (!checkResult.Item1) @@ -112,12 +238,12 @@ Dt_Task newTask = new Dt_Task() { - CurrentAddress = stationCode, + CurrentAddress = "", Grade = 0, - NextAddress = locationInfo.LocationCode, + NextAddress = stationCode, PalletCode = palletCode, Roadway = roadwayNo, - SourceAddress = stationCode, + SourceAddress = "", TargetAddress = locationInfo.LocationCode, TaskType = TaskTypeEnum.Inbound.ObjToInt(), TaskStatus = TaskStatusEnum.New.ObjToInt(), -- Gitblit v1.9.3