From 06eb604f71605c47f015b88b1620b72b6f69df8c Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期一, 22 九月 2025 05:20:41 +0800 Subject: [PATCH] 功能增加,代码优化 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 269 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 241 insertions(+), 28 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" index c5fe062..5677732 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" @@ -139,29 +139,6 @@ return WebResponseContent.Instance.Error(ex.Message); } } - /// <summary> - /// 鏀捐揣瀹屾垚 - /// </summary> - /// <param name="code"></param> - /// <returns></returns> - public WebResponseContent PutFinish(string code, string barCode = "", string taskNum = "") - { - try - { - string url = AppSettings.Get("WCS"); - if (string.IsNullOrEmpty(url)) - { - return WebResponseContent.Instance.Error($"鏈壘鍒癢CSAApi鍦板潃,璇锋鏌ラ厤缃枃浠�"); - } - string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code={code}&barCode={barCode}&taskNum={taskNum}" ); - - return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("杩斿洖閿欒"); - } - catch (Exception ex) - { - return WebResponseContent.Instance.Error(ex.Message); - } - } public WebResponseContent AGVTasks(SaveModel saveModel) { @@ -266,6 +243,7 @@ if (task.TaskType == TaskTypeEnum.MesPalletLargeReturn.ObjToInt() || task.TaskType == TaskTypeEnum.MesPalletSmallReturn.ObjToInt()) { task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + FeedBackWCSTaskCompleted(taskNum); _unitOfWorkManage.BeginTran(); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚); _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); @@ -294,6 +272,7 @@ { stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + FeedBackWCSTaskCompleted(taskNum); stockInfo.Details.ForEach(x => { x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); @@ -1179,7 +1158,7 @@ return content; } - public WebResponseContent InboundTaskHandCancel(int taskNum, int warehouseId) + public WebResponseContent InboundTaskHandCancel(int taskNum) { try { @@ -1188,10 +1167,70 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅"); } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()) + { + if(task.TaskType == TaskTypeEnum.EmptyProductBack.ObjToInt()) + { + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(taskNum); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); + if (proStockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅"); + } + Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (prolocationInfo != null) + { + if (prolocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + prolocationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + } + if(task.TaskType == TaskTypeEnum.InProduct.ObjToInt()) + { + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _stockService.ProStockInfoService.Repository.DeleteAndMoveIntoHty(proStockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _stockService.ProStockInfoDetailService.Repository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + else + { + proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + proStockInfo.proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + }); + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo); + _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails); + _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + } Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First(); if (stockInfo == null) { return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅"); + } + if (!string.IsNullOrEmpty(stockInfo.LocationCode)) + { + return WebResponseContent.Instance.Error($"璇ユ墭鐩樺凡缁戝畾璐т綅"); } if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt()) { @@ -1201,6 +1240,7 @@ { task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); @@ -1214,17 +1254,190 @@ { return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); } - - LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; - locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); } + Dt_InboundOrder? inboundOrder = _inboundRepository.InboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.InboundOrderNo == stockInfo.Details.FirstOrDefault().OrderNo).Includes(x => x.Details).First(); + Dt_InboundOrderDetail? inboundOrderDetail = null; + Dt_ReturnOrder? returnOrder = null; + //鏍囧噯鍏ュ簱娴佺▼鏌ユ壘鍏ュ簱鍗曟嵁 + if (inboundOrder != null && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱纭.ObjToInt()&&(task.WarehouseId == WarehouseEnum.HA152.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA58.ObjToInt())) + { + inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.RowNo == stockInfo.Details.FirstOrDefault()?.InboundOrderRowNo); + foreach (var item in stockInfo.Details) + { + if (inboundOrderDetail == null) + { + continue; + } + inboundOrderDetail.ReceiptQuantity -= item.StockQuantity; + } + //鍒ゆ柇鏄惁涓洪��鏂欏叆搴撳崟 + if (inboundOrder.OrderType == InOrderTypeEnum.Return.ObjToInt()) + { + returnOrder = _inboundRepository.ReturnOrderRepository.Db.Queryable<Dt_ReturnOrder>().Where(x => x.OrderNo == inboundOrder.UpperOrderNo).Includes(x => x.Details).First(); + returnOrder.ReturnOrderStatus = ReturnOrderStatusEnum.Returned.ObjToInt(); + foreach (var item in inboundOrder.Details) + { + Dt_ReturnOrderDetail returnOrderDetail = returnOrder.Details?.FirstOrDefault(x => x.MCode == item.MaterielCode); + if (returnOrderDetail != null) + { + returnOrderDetail.ReturnQty -= item.ReceiptQuantity; + } + } + } + } + if(task.WarehouseId == WarehouseEnum.HA154.ObjToInt()|| task.WarehouseId == WarehouseEnum.HA152.ObjToInt() || task.WarehouseId == WarehouseEnum.HA58.ObjToInt()) + { + _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + }else + { + stockInfo.StockStatus = StockStatusEmun.缁勭洏鏆傚瓨.ObjToInt(); + } + + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(taskNum); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + if (inboundOrder != null && inboundOrderDetail != null) + { + _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); + _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); + } + if (returnOrder != null) + { + _inboundRepository.ReturnOrderRepository.UpdateData(returnOrder); + _inboundRepository.ReturnOrderDetailRepository.UpdateData(returnOrder.Details); + } + _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); - + } catch(Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } + + public WebResponseContent OutboundTaskHandCancel(int taskNum) + { + try + { + Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum); + if (task == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅"); + } + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseType == WarehouseTypEnum.鎴愬搧.ToString()) + { + + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); + if (proStockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅"); + } + Dt_LocationInfo prolocationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (prolocationInfo != null) + { + if (prolocationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + prolocationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + } + proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + proStockInfo.proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + x.OutboundQuantity = 0; + }); + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + _unitOfWorkManage.BeginTran(); + FeedBackWCSTaskHandCancel(taskNum); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.鑷姩鍒犻櫎); + _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo); + _stockService.ProStockInfoDetailService.Repository.UpdateData(proStockInfo.proStockInfoDetails); + _basicService.LocationInfoService.UpdateLocationStatus(prolocationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == task.PalletCode && x.WarehouseId == task.WarehouseId).Includes(x => x.Details).First(); + if (stockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒版墭鐩樺搴旂殑缁勭洏淇℃伅"); + } + if (string.IsNullOrEmpty(stockInfo.LocationCode)) + { + return WebResponseContent.Instance.Error($"璇ユ墭鐩樺湪绔嬪簱鏈粦瀹氳揣浣�"); + } + if (stockInfo.Details.Count == 0 && stockInfo.PalletType != PalletTypeEnum.Empty.ObjToInt()) + { + return WebResponseContent.Instance.Error($"鏈壘鍒拌鎵樼洏搴撳瓨鏄庣粏淇℃伅"); + } + Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationInfo != null) + { + if (locationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + } + + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + stockInfo.Details.ForEach(x => + { + x.Status = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + x.OutboundQuantity = 0; + }); + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(taskNum); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐鍒犻櫎 : OperateTypeEnum.浜哄伐鍒犻櫎); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + + public WebResponseContent RelocationTaskHandCancel(Dt_Task task) + { + Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (stockInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旇揣浣嶇殑搴撳瓨淇℃伅"); + } + + Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationInfoStart == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑璧风偣璐т綅淇℃伅"); + } + + Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationInfoEnd == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒板搴旂殑缁堢偣璐т綅淇℃伅"); + } + task.TaskStatus = TaskStatusEnum.Cancel.ObjToInt(); + FeedBackWCSTaskHandCancel(task.TaskNum); + _unitOfWorkManage.BeginTran(); + stockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + _stockService.StockInfoService.Repository.UpdateData(stockInfo); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.浜哄伐鍒犻櫎 : WIDESEA_Core.Enums.OperateTypeEnum.鑷姩鍒犻櫎); + _unitOfWorkManage.CommitTran(); + return WebResponseContent.Instance.OK(); + } } } -- Gitblit v1.9.3