From e1dd1dc9ba7135e3d64a65587d6c1be2c3e18c5a Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期三, 25 六月 2025 11:01:22 +0800 Subject: [PATCH] 提交最新优化代码 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 146 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 138 insertions(+), 8 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 908cc94..1c3e7d4 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" @@ -41,6 +41,7 @@ using WIDESEA_External.Model; using WIDESEA_IBasicRepository; using WIDESEA_IBasicService; +using WIDESEA_ICheckRepository; using WIDESEA_IInboundRepository; using WIDESEA_IInboundService; using WIDESEA_IOutboundRepository; @@ -75,6 +76,7 @@ private readonly IOutboundRepository _outboundRepository; private readonly IProInStatisticsRepository _proInStatisticsRepository; private readonly IProInStatisticsService _proInStatisticsService; + private readonly ICheckOrderRepository _checkOrderRepository; public ITaskRepository Repository => BaseDal; private Dictionary<string, OrderByType> _taskOrderBy = new() @@ -87,7 +89,7 @@ public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList(); - public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService) : base(BaseDal) + public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService, ICheckOrderRepository checkOrderRepository) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; @@ -106,13 +108,14 @@ _outboundRepository = outboundRepository; _proInStatisticsRepository = proInStatisticsRepository; _proInStatisticsService = proInStatisticsService; + _checkOrderRepository = checkOrderRepository; } /// <summary> /// 浠诲姟淇℃伅鎺ㄩ�佽嚦WCS /// </summary> /// <returns></returns> - public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription = "") + public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription = "",string agvtaskNum="") { try { @@ -120,6 +123,7 @@ taskDTOs.ForEach(x => { x.AGVArea = agvDescription; + x.AGVTaskNum = agvtaskNum; }); string url = AppSettings.Get("WCS"); if (string.IsNullOrEmpty(url)) @@ -510,6 +514,11 @@ { x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); }); + + #region todo:涓存椂鏇存柊鎵�鏈夌爺鍙戣浆鎴愬搧 + proStockInfo.ProStockAttribute=ProStockAttributeEnum.鎴愬搧.ObjToInt(); + proStockInfo.WarehouseId = locationInfo.WarehouseId; + #endregion //鏇存柊鍏ュ簱鐘舵�� task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); @@ -618,11 +627,17 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌揣浣嶄俊鎭�"); } + if ((task.TaskType == TaskTypeEnum.OutInventory.ObjToInt())) + { + return OutInventoryCompleted(task,stockInfo, locationInfo); + } List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum); List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>(); List<Dt_MesPPOutboundOrder> mesPPOutboundOrders = new List<Dt_MesPPOutboundOrder>(); - if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt())) + Dt_CheckOrder? checkOrder = null; + Dt_OutboundOrder? outboundOrder = null; + if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA154.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt())) { return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撹鎯呬俊鎭�"); } @@ -635,7 +650,7 @@ Dt_MesOutboundOrder mesOutboundOrder = _outboundService.MesOutboundOrderService.Repository.QueryFirst(x => x.TaskNo == item.OrderNo); if (mesOutboundOrder != null) { - mesOutboundOrder.OverOutQuantity = item.AssignQuantity; + mesOutboundOrder.OverOutQuantity += item.AssignQuantity; if (mesOutboundOrder.OverOutQuantity == mesOutboundOrder.OrderQuantity) { mesOutboundOrder.OrderStatus = OrderDetailStatusEnum.Over.ObjToInt(); @@ -659,6 +674,7 @@ } else { + //鑾峰彇鍑哄簱鍗曟槑缁� Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == item.OrderDetailId); if (outboundOrderDetail != null) { @@ -668,7 +684,33 @@ outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); } outboundOrderDetails.Add(outboundOrderDetail); + //鑾峰彇鍑哄簱鍗� + outboundOrder = _outboundRepository.OutboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First() ?? throw new Exception("鏈壘鍒板嚭搴撳崟"); + if (task.TaskType == TaskTypeEnum.OutQuality.ObjToInt()) + { + Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== outboundOrderDetail.MaterielCode); + + checkOrder = new Dt_CheckOrder + { + ReceivedQuantity = item.OriginalQuantity, + OrderType = CheckTypeEnum.InspectCheck.ObjToInt(), + ReceiveOrderNo = outboundOrder.OrderNo, + OrderPalletCode= item.PalletCode, + LotNo = item.BatchNo, + Result = CheckAcceptEnum.NotCheckAccept.ToString(), + QualifiedQuantity = 0, + ReceiveDetailRowNo = item.Id, + WarehouseId = outboundOrder.WarehouseId, + ScrappedQuantity = 0, + MaterielCode=materielInfo.MaterielCode, + MaterielSpec = materielInfo.MaterielSpec, + Unit = materielInfo.MaterielUnit, + ReturnQuantity = 0, + DefectedQuantity = 0 + }; + } } + } item.Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); } @@ -678,12 +720,22 @@ FeedBackWCSTaskCompleted(taskNum); _unitOfWorkManage.BeginTran(); - if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt()) + if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt()) { - //澶勭悊鍑哄簱璇︽儏 + //澶勭悊鍑哄簱璇︽儏浠ュ強搴撳瓨鐘舵�� if (outboundOrderDetails.Count > 0) { _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails); + //鏇存柊鍑哄簱鍗曠姸鎬� + if (task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) + { + int detailCount = outboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count; + if ((outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count + detailCount) == outboundOrder.Details.Count) + { + outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrder); + } + } } stockInfo.LocationCode = ""; stockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); @@ -695,17 +747,31 @@ { stockInfo.StockLength = 0; } + if (checkOrder!=null) + { + stockInfo.StockStatus = StockStatusEmun.閫佹瀹屾垚.ObjToInt(); + stockInfo.Details.ForEach(x => + { + x.Status = StockStatusEmun.閫佹瀹屾垚.ObjToInt(); + }); + _checkOrderRepository.AddData(checkOrder); + } _stockRepository.StockInfoRepository.UpdateData(stockInfo); _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); } - else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt()) + else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt())//杈呮枡绌虹鍑哄簱瀹屾垚 { _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); } - else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt()) + else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())//鏉挎枡Mes鍑哄簱瀹屾垚閫昏緫 { _outboundService.MesOutboundOrderService.Repository.UpdateData(mesOutboundOrders); + _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + } + else if (warehouse.WarehouseCode == WarehouseEnum.HA154.ToString()) + { _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); } @@ -951,5 +1017,69 @@ } return content; } + /// <summary> + /// 鐩樼偣鍑哄簱瀹屾垚 + /// </summary> + public WebResponseContent OutInventoryCompleted(Dt_Task task,Dt_StockInfo stockInfo,Dt_LocationInfo locationInfo) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鑾峰彇瀵瑰簲鐩樼偣鍗� + Dt_TakeStockOrder takeStockOrder = _inboundRepository.TakeStockOrderRepository.Db.Queryable<Dt_TakeStockOrder>().Where(x=>x.OrderNo==task.OrderNo).Includes(x=>x.Details).First(); + if (takeStockOrder==null) + { + return content.Error($"鐩樼偣鍗晎task.OrderNo}涓嶅瓨鍦�"); + } + if (takeStockOrder.TakeStockStatus!=TakeStockStatusEnum.鐩樼偣涓�.ObjToInt()) + { + return content.Error($"鐩樼偣鍗晎task.OrderNo}鐩樼偣宸插畬鎴愭垨鏈紑濮�"); + } + if (stockInfo.StockStatus!=StockStatusEmun.鍑哄簱閿佸畾.ObjToInt()) + { + return content.Error($"{stockInfo.PalletCode}搴撳瓨鐘舵�佷笉姝g‘"); + } + if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt()) + { + return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘"); + } + //鏍规嵁浠诲姟鎵樼洏鏌ョ洏鐐规槑缁� + Dt_TakeStockOrderDetail? takeStockOrderDetail = takeStockOrder.Details.FirstOrDefault(x=>x.TakePalletCode==stockInfo.PalletCode); + if (takeStockOrderDetail==null) + { + return content.Error($"{stockInfo.PalletCode}鏈壘鍒板搴旂洏鐐规槑缁�"); + } + if (takeStockOrderDetail.TakeDetalStatus!=TakeStockDetailStatusEnum.鐩樼偣鍑哄簱涓�.ObjToInt()) + { + return content.Error($"{stockInfo.PalletCode}鐩樼偣鏄庣粏鐘舵�佷笉姝g‘"); + } + takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.鐩樼偣鍑哄簱瀹屾垚.ObjToInt(); + stockInfo.StockStatus = StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt(); + stockInfo.Details.ForEach(x => + { + x.Status = StockStatusEmun.鐩樼偣鍑哄簱瀹屾垚.ObjToInt(); + }); + stockInfo.LocationCode = ""; + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + int beforeStatus = locationInfo.LocationStatus; + locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + _unitOfWorkManage.BeginTran(); + //璐т綅鍙樺姩璁板綍 + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, locationInfo.WarehouseId); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, takeStockOrder?.OrderNo ?? "", task.TaskNum); + _inboundRepository.TakeStockOrderDetailRepository.UpdateData(takeStockOrderDetail); + _stockRepository.StockInfoRepository.UpdateData(stockInfo); + _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + _unitOfWorkManage.CommitTran(); + content.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } } } -- Gitblit v1.9.3