From 2f8a8a7b31c7e311d1824c76e2a67e2a128bc65b Mon Sep 17 00:00:00 2001 From: wangxinhui <wangxinhui@hnkhzn.com> Date: 星期四, 06 三月 2025 17:34:04 +0800 Subject: [PATCH] 成品入库任务,货位 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs | 660 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 574 insertions(+), 86 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" index 7852115..5039413 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesTaskService.cs" @@ -28,6 +28,8 @@ using System.Reflection.Metadata; using WIDESEA_DTO.Task; using WIDESEA_DTO.Stock; +using SqlSugar; +using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup; namespace WIDESEA_TaskInfoService { @@ -75,7 +77,7 @@ (x.EnableStatus == (int)EnableStatusEnum.Normal || x.EnableStatus == (int)EnableStatusEnum.OnlyOut)); if (locationInfo == null) { - return responseContent.Error($"娴嬭瘯鏋惰揣浣�:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�"); + return responseContent.Error($"娴嬭瘯鏋惰揣浣嶃�傘�傘�傘�傘�傘�傘�傘�傘��:{stockInfo.LocationCode}鍑哄簱鏉′欢涓嶆弧瓒�"); } //鐢熸垚娴嬭瘯鏋跺嚭搴撲换鍔� 閿佸畾搴撳瓨 鏇存敼璐т綅鐘舵�� Dt_Task taskOut = new() @@ -292,7 +294,46 @@ } return content; } - + /// <summary> + /// WMS鍚屾鎴愬搧鍑哄簱鑷矼ES + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public WebResponseContent ShipmentOrderSync(MesShipmentOrderSync model) + { + WebResponseContent content = new WebResponseContent(); + try + { + Dt_ApiInfo apiInfo = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMS_MES_ShipmentOrderSync.ToString()); + MESRoot<MesShipmentOrderSync> root = new MESRoot<MesShipmentOrderSync>() + { + From = "WMS", + DateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Content = model + }; + JsonSerializerSettings settings = new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; + string request = JsonConvert.SerializeObject(root, settings); + string response = HttpMesHelper.Post(apiInfo.ApiAddress, request); + MesResponseContent mesResponseContent = response.DeserializeObject<MesResponseContent>(); + //璋冪敤鎺ュ彛 + if (mesResponseContent.BSucc == true) + { + content.OK(mesResponseContent.StrMsg); + } + else + { + content.Error(mesResponseContent.StrMsg); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } /// <summary> /// /// </summary> @@ -530,7 +571,14 @@ List<Dt_MesPPOutboundOrderDetail> mesPPOutboundOrderDetail = new List<Dt_MesPPOutboundOrderDetail>(); foreach (var item in model.Carriers) { - mesPPOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPOutboundOrderDetail>(item)); + //mesPPOutboundOrderDetail.Add(_mapper.Map<Dt_MesPPOutboundOrderDetail>(item)); + Dt_MesPPOutboundOrderDetail dt_MesPPOutboundOrderDetail = new Dt_MesPPOutboundOrderDetail + { + CarrierCode = item.CarrierCode, + Warehouse = item.Warehouse, + OrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt() + }; + mesPPOutboundOrderDetail.Add(dt_MesPPOutboundOrderDetail); } Dt_MesPPOutboundOrder mesOutboundOrder = new Dt_MesPPOutboundOrder() { @@ -542,8 +590,8 @@ Unit = model.Unit,//PP闇�瑕佽浆鎹㈡垚绫�(闇�姹傚钩鏂�(PNL鏁�*闈㈢Н)/瀹藉害) Width = model.Width, TargetAddressCode = model.TargetAddressCode, - OrderType = TaskTypeEnum.MesHandPickOutbound.ObjToInt(), OrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(), + OrderType = OutOrderTypeEnum.Issue.ObjToInt(), WarehouseId = warehouse.WarehouseId, Details = mesPPOutboundOrderDetail }; @@ -555,7 +603,7 @@ // List<Dt_OutStockLockInfo>? outStockLockInfos = null; // List<Dt_LocationInfo>? locationInfos = null; // { - (List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder); + //(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesOutboundOrder); // if (result.Item1 != null && result.Item1.Count > 0) // { // tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); @@ -645,12 +693,14 @@ { CreateType = OrderCreateTypeEnum.UpperSystemPush.ObjToInt(), TaskNo = model.TaskNo, - OrderType = TaskTypeEnum.MesOutbound.ObjToInt(), + OrderType = OutOrderTypeEnum.Issue.ObjToInt(), OrderStatus = OutOrderStatusEnum.鏈紑濮�.ObjToInt(), WarehouseId = warehouse.WarehouseId, Details = mesPPCutOutboundOrderDetail, }; + _unitOfWorkManage.BeginTran(); Db.InsertNav(mesPPOutboundOrder).Include(x => x.Details).ExecuteCommand(); + _unitOfWorkManage.CommitTran(); #region //List<Dt_Task> tasks = new List<Dt_Task>(); @@ -710,7 +760,7 @@ } catch (Exception ex) { - + _unitOfWorkManage.RollbackTran(); return MesResponseContent.Instance.Error(ex.Message); } } @@ -895,7 +945,7 @@ { content.Content = new { - MaterialCode= stock.MaterielCode, + MaterialCode = stock.MaterielCode, Quantity = stock.StockQuantity, Unit = stock.Unit, Warehouse = warehouse.WarehouseCode, @@ -926,25 +976,145 @@ { return content.Error("鏈壘鍒颁粨搴撲俊鎭�"); } + Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.WarehouseId == warehouse.WarehouseId); + if (locationInfo==null) + { + return content.Error($"鏈壘鍒皗warehouse.WarehouseCode}璐т綅淇℃伅"); + } + //鍐呭寘淇℃伅缁勭洏 List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); foreach (var item in bagInfoModel.BagDetails) { - mesProInOrderDetails.Add(_mapper.Map<Dt_MesProInOrderDetail>(item)); + foreach (var child in item.BagItems) + { + Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail() + { + BagNo = item.BagNo, + ProductCode = item.ProductCode, + ProductVersion = item.ProductVersion, + SETQty = child.SETQty, + OKPCSQTY = child.OKPCSQTY, + DateCode = item.DateCode, + XQty = child.XQty, + XSite = child.XSite, + Weight = item.Weight, + PackingDate = item.PackingDate, + LotNumber = child.LotNumber, + ERPOrder = child.ERPOrder, + SaleOrder = child.SaleOrder, + MoNumber = child.MoNumber, + }; + mesProInOrderDetails.Add(mesProInOrderDetail); + } } - mesProInOrderDetails.ForEach(x => + List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in mesProInOrderDetails) { - x.OverInQuantity = 0; - }); + proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item)); + } Dt_MesProInOrder mesProInOrder = new Dt_MesProInOrder() { WarehouseId = warehouse.WarehouseId, BatchNo = bagInfoModel.BatchNo, + WorkCenter = bagInfoModel.WorkCenter, MesProStatus = InOrderStatusEnum.鏈紑濮�.ObjToInt(), UnPackStock = bagInfoModel.UnPackStock, Details = mesProInOrderDetails }; + Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() + { + PalletCode = bagInfoModel.BatchNo, + PalletType = 1, + WarehouseId = warehouse.WarehouseId, + StockStatus = StockStatusEmun.鍏ュ簱纭.ObjToInt(), + proStockInfoDetails = proStockInfoDetails + }; + //鍒嗛厤璐т綅 + locationInfo = _basicService.LocationInfoService.AssignLocation(locationInfo.RoadwayNo, ((PalletTypeEnum)proStockInfo.PalletType).ObjToInt(), proStockInfo.WarehouseId); + Dt_Task newTask = new Dt_Task() + { + CurrentAddress = bagInfoModel.WorkCenter, + Grade = 0, + NextAddress = locationInfo.LocationCode, + PalletCode = proStockInfo.PalletCode, + Roadway = locationInfo.RoadwayNo, + SourceAddress = bagInfoModel.WorkCenter, + TargetAddress = locationInfo.LocationCode, + TaskType = TaskTypeEnum.InProduct.ObjToInt(), + TaskStatus = TaskStatusEnum.New.ObjToInt(), + WarehouseId = warehouse.WarehouseId, + PalletType = proStockInfo.PalletType + }; + locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt(); + + _unitOfWorkManage.BeginTran(); + int taskId = BaseDal.AddData(newTask); + newTask.TaskId = taskId; + _basicRepository.LocationInfoRepository.UpdateData(locationInfo); Db.InsertNav(mesProInOrder).Include(x => x.Details).ExecuteCommand(); + Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); + _unitOfWorkManage.CommitTran(); + //鎺ㄩ�佷换鍔� + PushTasksToWCS(new List<Dt_Task> { newTask }); return content.OK("鎺ユ敹鎴愬姛"); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + content.Error(ex.Message); + } + return content; + } + public MesResponseContent BoxStockin(MesBoxInfoModel boxInfoModel) + { + MesResponseContent content = new MesResponseContent(); + try + { + Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseCode == WarehouseEnum.HA101.ToString()); + //鑾峰彇MES鍐呭寘淇℃伅 + List<Dt_MesProInOrderDetail> mesProInOrderDetails = new List<Dt_MesProInOrderDetail>(); + foreach (var item in boxInfoModel.Bags) + { + foreach (var child in item.BagItems) + { + Dt_MesProInOrderDetail mesProInOrderDetail = new Dt_MesProInOrderDetail() + { + BagNo = item.BagNo, + ProductCode = item.ProductCode, + ProductVersion = item.ProductVersion, + SETQty = child.SETQty, + OKPCSQTY = child.OKPCSQTY, + DateCode = item.DateCode, + XQty = child.XQty, + XSite = child.XSite, + Weight = item.Weight, + PackingDate = item.PackingDate, + LotNumber = child.LotNumber, + ERPOrder = child.ERPOrder, + SaleOrder = child.SaleOrder, + MoNumber = child.MoNumber, + }; + mesProInOrderDetails.Add(mesProInOrderDetail); + } + } + List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); + foreach (var item in mesProInOrderDetails) + { + proStockInfoDetails.Add(_mapper.Map<Dt_ProStockInfoDetail>(item)); + } + Dt_ProStockInfo proStockInfo = new Dt_ProStockInfo() + { + PalletCode = boxInfoModel.BoxNo, + PalletType = 0, + WarehouseId = warehouse.WarehouseId, + ShipmentOrder = boxInfoModel.ShipmentOrder, + StockStatus = StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt(), + proStockInfoDetails = proStockInfoDetails + }; + _unitOfWorkManage.BeginTran(); + Db.InsertNav(proStockInfo).Include(x => x.proStockInfoDetails).ExecuteCommand(); + _unitOfWorkManage.CommitTran(); + return content.OK("澶栧寘鎺ユ敹鎴愬姛"); } catch (Exception ex) { @@ -952,7 +1122,6 @@ } return content; } - /// <summary> /// 鎴愬搧杩斿伐鎻愬簱 /// </summary> @@ -984,8 +1153,11 @@ return MesResponseContent.Instance.OK(); } + + + /// <summary> - /// 鐢熸垚鍑哄簱浠诲姟 + /// 鐢熸垚PP澶у嵎鍑哄簱浠诲姟 /// </summary> /// <param name="keys">鍑哄簱鍗曟槑缁嗕富閿�</param> /// <returns></returns> @@ -1000,7 +1172,7 @@ List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>(); List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); - (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = MESPPOutboundTaskDataHandle(keys); + (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, Dt_MesPPOutboundOrder mesPPOutboundOrder) result = MESPPOutboundTaskDataHandle(keys); if (result.Item2 != null && result.Item2.Count > 0) { stockInfos.AddRange(result.Item2); @@ -1021,13 +1193,131 @@ { tasks.AddRange(result.Item1); } + if (result.mesPPOutboundOrder != null) + { - WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos); + } + + WebResponseContent content = MESPPGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, result.mesPPOutboundOrder); return content; } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + } + + /// <summary> + /// PP澶у嵎鍑哄簱浠诲姟鏁版嵁澶勭悊 + /// </summary> + /// <param name="orderDetailId"></param> + /// <param name="stockSelectViews"></param> + /// <returns></returns> + /// <exception cref="Exception"></exception> + public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?, Dt_MesPPOutboundOrder mesPPOutboundOrder) MESPPOutboundTaskDataHandle(int[] keys) + { + List<Dt_Task> tasks = new List<Dt_Task>(); + List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList(); + if (outboundOrderDetails == null || outboundOrderDetails.Count == 0) + { + throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅"); + } + if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null) + { + throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�"); + } + List<Dt_StockInfo>? stockInfos = null; + List<Dt_MesPPOutboundOrderDetail>? orderDetails = null; + List<Dt_OutStockLockInfo>? outStockLockInfos = null; + List<Dt_LocationInfo>? locationInfos = null; + Dt_MesPPOutboundOrder? mesPPOutboundOrders = null; + if (outboundOrderDetails.FirstOrDefault().OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + { + (List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>, Dt_MesPPOutboundOrder mesPPOutboundOrder) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails); + if (result.Item1 != null && result.Item1.Count > 0) + { + Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId); + TaskTypeEnum typeEnum = outboundOrder.OrderType switch + { + (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound, + (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate, + (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality, + _ => new TaskTypeEnum() + }; + tasks = GetTasks(result.Item1, typeEnum); + result.Item2.ForEach(x => + { + x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + }); + result.Item3.ForEach(x => + { + x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); + }); + + stockInfos = result.Item1; + orderDetails = result.Item2; + outStockLockInfos = result.Item3; + locationInfos = result.Item4; + mesPPOutboundOrders = result.mesPPOutboundOrder; + } + else + { + throw new Exception("鏃犲簱瀛�"); + } + } + //else + //{ + // List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetails.oi, OutLockStockStatusEnum.宸插垎閰�); + // if (stockLockInfos != null && stockLockInfos.Count > 0) + // { + // List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList()); + // tasks = GetTasks(stocks); + // } + //} + + return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos, mesPPOutboundOrders); + } + + /// <summary> + /// PP骞冲簱鐩存帴鍑哄簱 + /// </summary> + /// <param name="orderDetailId"></param> + /// <param name="stockSelectViews"></param> + /// <returns></returns> + public WebResponseContent PPGeneratePKOutboundTask(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews) + { + try + { + (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPOutboundTaskDataHandle(orderDetailId, stockSelectViews); + + WebResponseContent content = PPGenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5); + + return content; + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// PP绔嬪簱灏忓嵎鐩存帴鍑哄簱 + /// </summary> + /// <param name="orderDetailId"></param> + /// <param name="stockSelectViews"></param> + /// <returns></returns> + public WebResponseContent PPCutOutGenerateOutboundTasks(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews) + { + try + { + (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPOutboundTaskDataHandle(orderDetailId, stockSelectViews); + + WebResponseContent content = PPGenerateOutboundTaskDataUpdate(result.Item1, result.Item2, result.Item3, result.Item4, result.Item5); + + return content; + } + catch (Exception ex) + { return WebResponseContent.Instance.Error(ex.Message); } } @@ -1039,85 +1329,68 @@ /// <param name="stockSelectViews"></param> /// <returns></returns> /// <exception cref="Exception"></exception> - public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) MESPPOutboundTaskDataHandle(int[] keys) + public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) PPOutboundTaskDataHandle(int orderDetailId, List<PPStockSelectViewDTO> stockSelectViews) { List<Dt_Task> tasks = new List<Dt_Task>(); - //List<Dt_MesPPOutboundOrderDetail> outboundOrderDetailss = _outboundService.MesPPOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.Id)); + Dt_MesPPCutOutboundOrderDetail outboundOrderDetail = _outboundService.MesPPCutOutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId); - //List<Dt_MesPPOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList(); - //List<Dt_MesPPOutboundOrder> mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => keys.Contains(10)).ToList(); - Dt_MesPPOutboundOrderDetail outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).First(); - Dt_MesPPOutboundOrder mesPPOutboundOrder = BaseDal.Db.Queryable<Dt_MesPPOutboundOrder>().Where(x => x.Id == 10).First(); - //if (outboundOrderDetails == null || outboundOrderDetails.Count == 0) - //{ - // throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅"); - //} - //if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null) - //{ - // throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�"); - //} + if (outboundOrderDetail == null) + { + throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅"); + } + + if (stockSelectViews.Sum(x => x.UseableQuantity) > outboundOrderDetail.OrderQuantity - outboundOrderDetail.LockQuantity) + { + throw new Exception("閫夋嫨鏁伴噺瓒呭嚭鍗曟嵁鏁伴噺"); + } List<Dt_StockInfo>? stockInfos = null; - List<Dt_MesPPOutboundOrderDetail>? orderDetails = null; + Dt_MesPPCutOutboundOrderDetail? orderDetail = null; List<Dt_OutStockLockInfo>? outStockLockInfos = null; List<Dt_LocationInfo>? locationInfos = null; - //if (outboundOrderDetails == OrderDetailStatusEnum.New.ObjToInt()) + if (outboundOrderDetail.OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) { - //(List<Dt_StockInfo>, Dt_MesPPOutboundOrder, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderService.AssignStockOutbound(mesPPOutboundOrder); - //(List<Dt_StockInfo>, List<Dt_MesPPOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails); - (List<Dt_StockInfo>, Dt_MesPPOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result1 = _outboundService.MesPPOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails); - //if (result.Item1 != null && result.Item1.Count > 0) - //{ - // Dt_MesPPOutboundOrder outboundOrder = _outboundService.MesPPOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId); - // TaskTypeEnum typeEnum = outboundOrder.OrderType switch - // { - // (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound, - // (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate, - // (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality, - // _ => new TaskTypeEnum() - // }; - // tasks = GetTasks(result.Item1, typeEnum); - // result.Item2.ForEach(x => - // { - // x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); - // }); - // result.Item3.ForEach(x => - // { - // x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); - // }); + (List<Dt_StockInfo>, Dt_MesPPCutOutboundOrderDetail, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPCutOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetail, stockSelectViews); + if (result.Item1 != null && result.Item1.Count > 0) + { + Dt_MesPPCutOutboundOrder outboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetail.OrderId); + TaskTypeEnum typeEnum = outboundOrder.OrderType switch + { + (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound, + (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate, + (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality, + _ => new TaskTypeEnum() + }; + tasks = GetTasks(result.Item1, TaskTypeEnum.Outbound); + result.Item2.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + result.Item3.ForEach(x => + { + x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); + }); - // stockInfos = result.Item1; - // orderDetails = result.Item2; - // outStockLockInfos = result.Item3; - // locationInfos = result.Item4; - //} - //else - //{ - // throw new Exception("鏃犲簱瀛�"); - //} + stockInfos = result.Item1; + orderDetail = result.Item2; + outStockLockInfos = result.Item3; + locationInfos = result.Item4; + } + else + { + throw new Exception("鏃犲簱瀛�"); + } } - //else - //{ - // List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.宸插垎閰�); - // if (stockLockInfos != null && stockLockInfos.Count > 0) - // { - // List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList()); - // tasks = GetTasks(stocks); - // } - //} + else + { + List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetail.OrderId, OutLockStockStatusEnum.宸插垎閰�); + if (stockLockInfos != null && stockLockInfos.Count > 0) + { + List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList()); + tasks = GetTasks(stocks, TaskTypeEnum.Outbound); + } + } - return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos); + return (tasks, stockInfos, orderDetail == null ? null : new List<Dt_MesPPCutOutboundOrderDetail> { orderDetail }, outStockLockInfos, locationInfos); } - /// <summary> - /// 鐢熸垚鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴� - /// </summary> - /// <param name="tasks"></param> - /// <param name="stockInfos"></param> - /// <param name="outboundOrderDetails"></param> - /// <param name="outStockLockInfos"></param> - /// <param name="locationInfos"></param> - /// <returns></returns> - public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null) + public WebResponseContent PPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPCutOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null) { try { @@ -1130,7 +1403,224 @@ { x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); }); - WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); + WebResponseContent content = _outboundService.MesPPCutOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); + if (!content.Status) + { + _unitOfWorkManage.RollbackTran(); + return content; + } + } + else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0) + { + outboundOrderDetails.ForEach(x => + { + x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + }); + + _outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails); + } + _unitOfWorkManage.CommitTran(); + PushTasksToWCS(tasks); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error(ex.Message); + } + + } + #region + /// <summary> + /// 鐢熸垚PP灏忓嵎鍑哄簱浠诲姟 + /// </summary> + /// <param name="keys">鍑哄簱鍗曟槑缁嗕富閿�</param> + /// <returns></returns> + //public WebResponseContent PPCutOutGenerateOutboundTasks(int[] keys) + //{ + // try + // { + // List<Dt_Task> tasks = new List<Dt_Task>(); + // List<StockSelectViewDTO> stockSelectViews = new List<StockSelectViewDTO>(); + // List<Dt_StockInfo> stockInfos = new List<Dt_StockInfo>(); + // List<Dt_MesPPCutOutboundOrderDetail> outboundOrderDetails = new List<Dt_MesPPCutOutboundOrderDetail>(); + // List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>(); + // List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); + + // (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) result = PPCutOutboundTaskDataHandle(keys); + // if (result.Item2 != null && result.Item2.Count > 0) + // { + // stockInfos.AddRange(result.Item2); + // } + // if (result.Item3 != null && result.Item3.Count > 0) + // { + // outboundOrderDetails.AddRange(result.Item3); + // } + // if (result.Item4 != null && result.Item4.Count > 0) + // { + // outStockLockInfos.AddRange(result.Item4); + // } + // if (result.Item5 != null && result.Item5.Count > 0) + // { + // locationInfos.AddRange(result.Item5); + // } + // if (result.Item1 != null && result.Item1.Count > 0) + // { + // tasks.AddRange(result.Item1); + // } + + // WebResponseContent content = PPCutOutGenerateOutboundTaskDataUpdate(tasks, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos); + // return content; + // } + // catch (Exception ex) + // { + // _unitOfWorkManage.RollbackTran(); + // return WebResponseContent.Instance.Error(ex.Message); + // } + //} + + ///// <summary> + ///// PP灏忓嵎鍑哄簱浠诲姟鏁版嵁澶勭悊 + ///// </summary> + ///// <param name="orderDetailId"></param> + ///// <param name="stockSelectViews"></param> + ///// <returns></returns> + ///// <exception cref="Exception"></exception> + //public (List<Dt_Task>, List<Dt_StockInfo>?, List<Dt_MesPPCutOutboundOrderDetail>?, List<Dt_OutStockLockInfo>?, List<Dt_LocationInfo>?) PPCutOutboundTaskDataHandle(int[] keys) + //{ + // List<Dt_Task> tasks = new List<Dt_Task>(); + // List<Dt_MesPPCutOutboundOrderDetail> outboundOrderDetails = BaseDal.Db.Queryable<Dt_MesPPCutOutboundOrderDetail>().Where(x => keys.Contains(x.Id)).ToList(); + // if (outboundOrderDetails == null || outboundOrderDetails.Count == 0) + // { + // throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅"); + // } + // if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null) + // { + // throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�"); + // } + // List<Dt_StockInfo>? stockInfos = null; + // List<Dt_MesPPCutOutboundOrderDetail>? orderDetails = null; + // List<Dt_OutStockLockInfo>? outStockLockInfos = null; + // List<Dt_LocationInfo>? locationInfos = null; + // if (outboundOrderDetails.FirstOrDefault().OrderDetailStatus == OrderDetailStatusEnum.New.ObjToInt()) + // { + // (List<Dt_StockInfo>, List<Dt_MesPPCutOutboundOrderDetail>, List<Dt_OutStockLockInfo>, List<Dt_LocationInfo>) result = _outboundService.MesPPCutOutboundOrderDetailService.AssignStockOutbound(outboundOrderDetails); + // if (result.Item1 != null && result.Item1.Count > 0) + // { + // Dt_MesPPCutOutboundOrder outboundOrder = _outboundService.MesPPCutOutboundOrderService.Repository.QueryFirst(x => x.Id == outboundOrderDetails.FirstOrDefault().OrderId); + // //TaskTypeEnum typeEnum = outboundOrder.OrderType switch + // //{ + // // (int)OutOrderTypeEnum.Issue => TaskTypeEnum.Outbound, + // // (int)OutOrderTypeEnum.Allocate => TaskTypeEnum.OutAllocate, + // // (int)OutOrderTypeEnum.Quality => TaskTypeEnum.OutQuality, + // // _ => new TaskTypeEnum() + // //}; + // tasks = GetTasks(result.Item1, TaskTypeEnum.MesOutbound); + // result.Item2.ForEach(x => + // { + // x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + // }); + // result.Item3.ForEach(x => + // { + // x.Status = OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(); + // }); + + // stockInfos = result.Item1; + // orderDetails = result.Item2; + // outStockLockInfos = result.Item3; + // locationInfos = result.Item4; + // } + // else + // { + // throw new Exception("鏃犲簱瀛�"); + // } + // } + // //else + // //{ + // // List<Dt_OutStockLockInfo> stockLockInfos = _outboundService.OutboundStockLockInfoService.GetByOrderDetailId(outboundOrderDetails.OrderId, OutLockStockStatusEnum.宸插垎閰�); + // // if (stockLockInfos != null && stockLockInfos.Count > 0) + // // { + // // List<Dt_StockInfo> stocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockLockInfos.Select(x => x.PalletCode).Distinct().ToList()); + // // tasks = GetTasks(stocks); + // // } + // //} + + // return (tasks, stockInfos, orderDetails, outStockLockInfos, locationInfos); + //} + + ///// <summary> + ///// 鐢熸垚PP灏忓嵎鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴� + ///// </summary> + ///// <param name="tasks"></param> + ///// <param name="stockInfos"></param> + ///// <param name="outboundOrderDetails"></param> + ///// <param name="outStockLockInfos"></param> + ///// <param name="locationInfos"></param> + ///// <returns></returns> + //public WebResponseContent PPCutOutGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPCutOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null) + //{ + // try + // { + // _unitOfWorkManage.BeginTran(); + + // BaseDal.AddData(tasks); + // if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) + // { + // stockInfos.ForEach(x => + // { + // x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + // }); + // WebResponseContent content = _outboundService.MesPPCutOutboundOrderDetailService.LockOutboundStockDataUpdate(stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); + + // if (!content.Status) + // { + // _unitOfWorkManage.RollbackTran(); + // return content; + // } + // } + // else if (outboundOrderDetails != null && outboundOrderDetails.Count > 0) + // { + // outboundOrderDetails.ForEach(x => + // { + // x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt(); + // }); + + // _outboundService.MesPPCutOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails); + // } + // _unitOfWorkManage.CommitTran(); + // PushTasksToWCS(tasks,"AGV_PP"); + // return WebResponseContent.Instance.OK(); + // } + // catch (Exception ex) + // { + // _unitOfWorkManage.RollbackTran(); + // return WebResponseContent.Instance.Error(ex.Message); + // } + //} + #endregion + /// <summary> + /// 鐢熸垚PP澶у嵎鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴� + /// </summary> + /// <param name="tasks"></param> + /// <param name="stockInfos"></param> + /// <param name="outboundOrderDetails"></param> + /// <param name="outStockLockInfos"></param> + /// <param name="locationInfos"></param> + /// <returns></returns> + public WebResponseContent MESPPGenerateOutboundTaskDataUpdate(List<Dt_Task> tasks, List<Dt_StockInfo>? stockInfos = null, List<Dt_MesPPOutboundOrderDetail>? outboundOrderDetails = null, List<Dt_OutStockLockInfo>? outStockLockInfos = null, List<Dt_LocationInfo>? locationInfos = null, Dt_MesPPOutboundOrder? mesPPOutboundOrder = null) + { + try + { + _unitOfWorkManage.BeginTran(); + + BaseDal.AddData(tasks); + if (stockInfos != null && stockInfos.Count > 0 && outboundOrderDetails != null && outboundOrderDetails.Count > 0 && outStockLockInfos != null && outStockLockInfos.Count > 0 && locationInfos != null && locationInfos.Count > 0) + { + stockInfos.ForEach(x => + { + x.StockStatus = StockStatusEmun.鍑哄簱閿佸畾.ObjToInt(); + }); + WebResponseContent content = _outboundService.MesPPOutboundOrderDetailService.LockOutboundStockDataUpdate(mesPPOutboundOrder, stockInfos, outboundOrderDetails, outStockLockInfos, locationInfos, tasks: tasks); if (!content.Status) { @@ -1156,8 +1646,6 @@ _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } - } - } } -- Gitblit v1.9.3