From 3a1a5e58e9ac1b4a8449601db8c6608897877746 Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期五, 21 三月 2025 11:26:12 +0800 Subject: [PATCH] 界面更新 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 213 insertions(+), 14 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 b53fad2..80bd640 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" @@ -50,6 +50,7 @@ using WIDESEA_ITaskInfoRepository; using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; +using WIDESEA_OutboundRepository; using WIDESEA_TaskInfoRepository; namespace WIDESEA_TaskInfoService @@ -69,7 +70,8 @@ private readonly IInboundRepository _inboundRepository; private readonly IInboundOrderService _inboundOrderService; private readonly IPalletTypeInfoRepository _palletTypeInfoRepository; - + private readonly IOutProStockInfoRepository _outProStockInfoRepository; + private readonly IOutboundRepository _outboundRepository; public ITaskRepository Repository => BaseDal; private Dictionary<string, OrderByType> _taskOrderBy = new() @@ -82,7 +84,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) : 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) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; @@ -97,6 +99,8 @@ _inboundRepository = inboundRepository; _inboundOrderService = inboundOrderService; _palletTypeInfoRepository = palletTypeInfoRepository; + _outProStockInfoRepository = outProStockInfoRepository; + _outboundRepository = outboundRepository; } /// <summary> @@ -189,7 +193,7 @@ { CurrentAddress = stationCode, Grade = 0, - NextAddress ="", + NextAddress = "", PalletCode = palletCode, Roadway = warehouse.Remark,//鏌ヨ瀵瑰簲绾胯竟浠撳湴鍧�宸烽亾鍙� SourceAddress = stationCode, @@ -201,7 +205,7 @@ }; _unitOfWorkManage.BeginTran(); BaseDal.AddData(newTask); - PushTasksToWCS(new List<Dt_Task> { newTask}); + PushTasksToWCS(new List<Dt_Task> { newTask }); _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); } @@ -226,7 +230,11 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌浠诲姟淇℃伅"); } - + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + if (warehouse.WarehouseCode==WarehouseEnum.HA71.ToString()) + { + return InProductCompleted(task); + } 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) { @@ -266,10 +274,8 @@ LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); - + stockInfo.LocationCode = locationInfo.LocationCode; - #region 绌虹鍏ュ簱/鎷i�夊洖搴�/鐢熶骇閫�鏂� if (task.TaskType == TaskTypeEnum.InEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.InPick.ObjToInt() || (task.TaskType == TaskTypeEnum.ProductionReturn.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA64.ToString())) { @@ -369,7 +375,7 @@ _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details); _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted); _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.Details, stockInfo.Details.Sum(x => x.StockQuantity), stockInfo.Details.Sum(x => x.StockQuantity), StockChangeTypeEnum.Inbound, taskNum); - if (inboundOrder != null) + if (inboundOrder != null && inboundOrderDetail != null) { _inboundRepository.InboundOrderRepository.UpdateData(inboundOrder); _inboundRepository.InboundOrderDetailRepository.UpdateData(inboundOrderDetail); @@ -389,7 +395,7 @@ } else { - _inboundOrderService.FeedbackInboundOrder(inboundOrder); + _inboundOrderService.FeedbackInboundOrder(inboundOrder.Id); } } return WebResponseContent.Instance.OK(); @@ -400,7 +406,70 @@ return WebResponseContent.Instance.Error(ex.Message); } } - + /// <summary> + /// 鎴愬搧浠撳叆搴撲换鍔″畬鎴� + /// </summary> + public WebResponseContent InProductCompleted(Dt_Task task) + { + WebResponseContent content=new WebResponseContent(); + try + { + //鑾峰彇缁勭洏淇℃伅 + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); + if (proStockInfo == null) + { + return content.Error($"鏈壘鍒拌兌妗嗕负{task.PalletCode}缁勭洏淇℃伅"); + } + Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); + if (locationInfo == null) + { + return WebResponseContent.Instance.Error($"鏈壘鍒扮洰鏍囪揣浣嶄俊鎭�"); + } + if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) + { + return WebResponseContent.Instance.Error($"璐т綅鐘舵�佷笉姝g‘"); + } + LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; + locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); + proStockInfo.LocationCode = locationInfo.LocationCode; + //鑾峰彇MES鍏ュ簱鍗曟嵁 + Dt_MesProInOrder mesProInOrder = _inboundRepository.MesProInOrderRepository.Db.Queryable<Dt_MesProInOrder>().Where(x => x.BatchNo == task.PalletCode).Includes(x => x.Details).First(); + if (mesProInOrder == null || mesProInOrder.Details == null || mesProInOrder.Details.Count <= 0) + { + return content.Error("鏈壘鍒癕ES鍐呭寘鍗曟嵁淇℃伅"); + } + //杩涜鍗曟嵁澶勭悊 + mesProInOrder.MesProStatus = InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt(); + mesProInOrder.Details.ForEach(x => + { + x.OverInQuantity = x.OKPCSQTY; + }); + proStockInfo.StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + proStockInfo.proStockInfoDetails.ForEach(x => + { + x.ProOutDetailStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(); + }); + //鏇存柊鍏ュ簱鐘舵�� + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + _unitOfWorkManage.BeginTran(); + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.浜哄伐瀹屾垚 : OperateTypeEnum.鑷姩瀹屾垚); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId); + _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); + _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails); + _inboundRepository.MesProInOrderRepository.UpdateData(mesProInOrder); + _inboundRepository.MesProInOrderDetailRepository.UpdateData(mesProInOrder.Details); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted); + _unitOfWorkManage.CommitTran(); + //涓婁紶ERP + _inboundOrderService.FeedbackProIn(mesProInOrder); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content.OK(); + } /// <summary> /// 鍑哄簱浠诲姟瀹屾垚 /// </summary> @@ -415,7 +484,12 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒颁换鍔′俊鎭�"); } - + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); + //鎴愬搧鍑哄簱浠诲姟瀹屾垚 + if (warehouse.WarehouseCode==WarehouseEnum.HA71.ToString()) + { + return OutProCompleted(task); + } Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode); Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); @@ -427,11 +501,10 @@ { return WebResponseContent.Instance.Error($"鏈壘鍒拌揣浣嶄俊鎭�"); } - Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); 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())) { return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撹鎯呬俊鎭�"); @@ -451,6 +524,20 @@ mesOutboundOrder.OrderStatus = OrderDetailStatusEnum.Over.ObjToInt(); } mesOutboundOrders.Add(mesOutboundOrder); + } + } + //PP鍑哄簱浠诲姟瀹屾垚鍒ゆ柇銆傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�� + else if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() && warehouse.WarehouseCode == WarehouseEnum.HA58.ToString()) + { + Dt_MesPPOutboundOrder mesPPOutboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.OrderNo == item.OrderNo); + if (mesPPOutboundOrder != null) + { + mesPPOutboundOrder.OverOutQuantity = item.AssignQuantity; + if (mesPPOutboundOrder.OverOutQuantity == mesPPOutboundOrder.OrderQuantity) + { + mesPPOutboundOrder.OrderStatus = OrderDetailStatusEnum.Over.ObjToInt(); + } + mesPPOutboundOrders.Add(mesPPOutboundOrder); } } else @@ -506,6 +593,15 @@ _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum); _unitOfWorkManage.CommitTran(); + //PP鍑哄簱浠诲姟瀹屾垚鍒ゆ柇銆傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�傘�� + if (warehouse.WarehouseCode == WarehouseEnum.HA58.ToString() && task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) + { + _outboundService.MesPPOutboundOrderService.Repository.UpdateData(mesPPOutboundOrders); + MesMaterialLotaAceptModel model = GetMesMaterialLotaAceptModel(stockInfo, stockInfo.Details.FirstOrDefault(), mesPPOutboundOrders.FirstOrDefault().TaskNo, warehouse.WarehouseCode, stockInfo.Details.Where(x => x.MaterielCode == mesPPOutboundOrders.FirstOrDefault().MaterialCode).Sum(x => x.StockQuantity)); + UploadMesMaterialLotaAcept(model); + _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + } if (warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && task.TaskType == TaskTypeEnum.Outbound.ObjToInt()) { _outboundService.OutboundOrderService.TestOutUpload(outboundOrderDetails.FirstOrDefault().OrderId, outStockLockInfos); @@ -523,6 +619,109 @@ return WebResponseContent.Instance.Error(ex.Message); } } + //鎴愬搧鍑哄簱浠诲姟瀹屾垚 + public WebResponseContent OutProCompleted(Dt_Task task) + { + WebResponseContent content = new WebResponseContent(); + try + { + //鑾峰彇璐т綅 + Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress); + if (locationInfo==null) + { + return content.Error("鏈壘鍒拌揣浣嶄俊鎭�"); + } + //鏍规嵁浠诲姟鑾峰彇鎴愬搧鍑哄簱璇︽儏浠诲姟鍙婄墿鏂欎俊鎭� + Dt_OutProStockInfo outProStockInfo = _outProStockInfoRepository.QueryFirst(x=>x.TaskNum==task.TaskNum); + if (outProStockInfo == null) + { + return content.Error("鏈壘鍒版垚鍝佸嚭搴撹鎯�"); + } + //鑾峰彇鎴愬搧鍑哄簱璁㈠崟 + Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outProStockInfo.OrderNo).Includes(x => x.Details).First(); + if (proOutOrder==null) + { + return content.Error("鏈壘鍒版垚鍝佸嚭搴撹鍗�"); + } + //鑾峰彇鎴愬搧搴撳瓨 + Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x=>x.PalletCode==task.PalletCode).Includes(x=>x.proStockInfoDetails).First(); + if (proStockInfo==null) + { + return content.Error("鏈壘鍒版垚鍝佸簱瀛樹俊鎭�"); + } + List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails; + if (proStockInfoDetails.Count<=0) + { + return content.Error("鎴愬搧搴撳瓨鏄庣粏"); + } + proStockInfoDetails.ForEach(x => + { + x.OutboundQuantity = 0; + x.ProOutDetailStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + }); + //澶勭悊搴撳瓨鏁版嵁 + //List<Dt_ProStockInfoDetail>? deleteStockDetails = null; + //List<Dt_ProStockInfoDetail>? updateStockDetails = null; + //(List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) result = _stockService.ProStockInfoService.HandleOutProStock(proStockInfo); + //if (result.Item1!=null && result.Item1.Count>0) + //{ + // deleteStockDetails.AddRange(result.Item1); + //} + //if (result.Item1 != null && result.Item1.Count > 0) + //{ + // updateStockDetails.AddRange(updateStockDetails); + //} + //鑾峰彇鎴愬搧鍑哄簱鍗曟槑缁� + Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x=>x.Id== outProStockInfo.OrderDetailId); + if (proOutOrderDetail==null) + { + return content.Error("鏈壘鍒板搴斾换鍔℃垚鍝佽鍗曟槑缁�"); + } + //if (deleteStockDetails?.Sum(x=>x.StockPcsQty)== proStockInfo.proStockInfoDetails.Sum(x=>x.StockPcsQty)) + //{ + proStockInfo.StockStatus = StockStatusEmun.鍑哄簱瀹屾垚.ObjToInt(); + proStockInfo.LocationCode = "鍑鸿嚦鎴愬搧寰呭彂璐у尯"; + //} + task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); + outProStockInfo.Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt(); + _unitOfWorkManage.BeginTran(); + //璐т綅鍙樺姩璁板綍 + int beforeStatus = locationInfo.LocationStatus; + locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); + _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); + _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, proOutOrder?.ProOutOrderNo ?? "", task.TaskNum); + if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.鏈紑濮�.ObjToInt()) + { + proOutOrder.ProOrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt(); + _outboundService.ProOutOrderService.UpdateData(proOutOrder); + } + //if (deleteStockDetails!=null && deleteStockDetails.Count>0) + //{ + // _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(deleteStockDetails, OperateTypeEnum.鑷姩瀹屾垚); + //} + //if (updateStockDetails!=null && updateStockDetails.Count>0) + //{ + _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); + _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails); + _outProStockInfoRepository.UpdateData(outProStockInfo); + //} + //else + //{ + //_stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo, OperateTypeEnum.鑷姩瀹屾垚); + //} + BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚); + _unitOfWorkManage.CommitTran(); + //MES鎴愬搧鍑哄簱鍚屾 + ShipmentOrderSync(MesOutSync(outProStockInfo, proOutOrderDetail)); + content.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } } } -- Gitblit v1.9.3