´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/CTU_AGVController .cs
@@ -177,8 +177,7 @@ switch (agvUpdateModel.Method.ToUpper()) { case "END": if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) if (task.TaskType.GetTaskTypeGroup()==TaskTypeGroup.OutbondGroup) PutFinish(task.NextAddress); _taskService.TaskCompleted(task.TaskNum); break; @@ -356,7 +355,7 @@ TakeFinish(task.CurrentAddress); //_taskService.UpdateTask(task, TaskStatusEnum.AGV_Executing); } else if(task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) else if(task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) { task.TaskState = TaskStatusEnum.AGV_Executing.ObjToInt(); _taskRepository.UpdateData(task); ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/³ÉÆ·²Ö/AGV_CPExtend.cs
@@ -29,7 +29,7 @@ { try { if (task.TaskType == TaskTypeEnum.OutProduct.ObjToInt()) if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) task.CurrentAddress = GetAGVAddress(task.CurrentAddress); else task.NextAddress = GetAGVAddress(task.NextAddress); ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/¸¨ÁϲÖ/AGV_FLExtend.cs
@@ -32,7 +32,7 @@ { try { if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt()) if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) task.CurrentAddress = GetAGVAddress(task.CurrentAddress); else task.NextAddress = GetAGVAddress(task.NextAddress); ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IMesRworkOutboundOrderService.cs
@@ -28,6 +28,8 @@ //åºåæ¿åºåº WebResponseContent ProductOutBoundSync(MesProductOutBound model); MesProductOutBound MesProOutBound(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<Dt_ProStockInfoDetail> proStockInfoDetails); /// <summary> /// æåMESæåºåºåºå®åä¸å ä¸å æ£é /// </summary> ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ErpProScrapSheetDetailService.cs
@@ -99,7 +99,7 @@ { PartNum = item.ScrapProCode, PartRev = item.ScrapProVersion, Lotno = item.ScrapProVersion, Lotno = item.ScrapProCode, QtyOfArray = item.ScrapSETQty, QtyOfUnit = item.ScrapPcsQty, QtyOfArray_Alloc = 0, @@ -131,7 +131,7 @@ { PartNum = item.ScrapProCode, PartRev = item.ScrapProVersion, Lotno = item.ScrapProVersion, Lotno = item.ScrapProCode, QtyOfArray = item.ScrapSETQty, QtyOfUnit = item.ScrapPcsQty, QtyOfArray_Alloc = 0, @@ -212,87 +212,6 @@ List<Dt_ProStockInfo> outStocks = new List<Dt_ProStockInfo>(); List<Dt_OutProStockInfo> outProStockInfos = new List<Dt_OutProStockInfo>(); List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>(); //List<Dt_ProOutOrderDetail> groupDetails = proOutOrderDetails.GroupBy(x => new { x.SaleOrder, x.PCode, x.PVer, x.PLot, x.DateCode }).Select(x => new Dt_ProOutOrderDetail() //{ // QtyPcs = x.Sum(x => x.QtyPcs) - x.Sum(x => x.OverQtyPcs), // SaleOrder = x.Key.SaleOrder, // PCode = x.Key.PCode, // PVer = x.Key.PVer, // PLot = x.Key.PLot, // DateCode = x.Key.DateCode, //}).ToList(); //foreach (var item in groupDetails) //{ // float needQty = item.QtyPcs; // //æ¥æ¾å¯ç¨åºå // List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(proOutOrder.WarehouseId, item); // if (!stockInfoss.Any()) // { // throw new Exception("æªæ¾å°å¯åé åºå"); // } // //è·ååºåºåºå // List<Dt_ProStockInfo> assignOutStocks = _stockInfoService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity); // item.LockQtyPcs += needQty - residueQuantity; // if (item.QtyPcs> item.LockQtyPcs) // { // throw new Exception($"产åç¼ç {item.PCode}å¯åé æ°éä¸è¶³,å¯ç¨æ°é{item.LockQtyPcs}"); // } // outStocks.AddRange(assignOutStocks); // float assignQuantity = needQty - residueQuantity; // bool isCanLot = string.IsNullOrEmpty(item.PLot); // bool isCanDate = string.IsNullOrEmpty(item.DateCode); // List<Dt_ProOutOrderDetail> details = proOutOrderDetails // .Where(x =>x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode)) // .ToList(); // for (int i = 0; i < details.Count; i++) // { // float orderQuantity = details[i].QtyPcs; // for (int j = 0; j < assignOutStocks.Count; j++) // { // //åºåºè®¢åæç»å·²åé æ°é // float detailAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.OrderDetailId == details[i].Id).Sum(x => x.AssignQuantity); // float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity); // //åºåºè¯¦æ å·²åé æ°é // palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);//åºåºè¯¦æ å·²åé æ°é // float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); // if (palletAssignQuantity < palletOutboundQuantity)//妿åºåºè¯¦æ å·²åé æ°éå°äºæçå·²åé æ°éï¼åå¯ä»¥ç»§ç»æ·»å 该æçåºåºä¿¡æ¯ // { // float orderDetailNeedQuantity = details[i].QtyPcs - detailAssignQuantity; // if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity) // { // details[i].LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity; // Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity); // outProStockInfos.Add(outStockLockInfo); // } // else // { // Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], details[i].QtyPcs - details[i].LockQtyPcs); // outProStockInfos.Add(outStockLockInfo); // details[i].LockQtyPcs = details[i].QtyPcs; // break; // } // } // } // } // List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList(); // locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr)); //} foreach (var item in proOutOrderDetails) { float needQty = item.ScrapPcsQty; @@ -315,15 +234,6 @@ { //åºåºè®¢åæç»å·²åé æ°é float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == item.Id).Sum(x => x.AssignQuantity); ////åºåºè¯¦æ å·²åé æ°é //float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity); ////åºåºè¯¦æ å·²åé æ°é //float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); //if (palletAssignQuantity < palletOutboundQuantity)//妿åºåºè¯¦æ å·²åé æ°éå°äºæçå·²åé æ°éï¼åå¯ä»¥ç»§ç»æ·»å 该æçåºåºä¿¡æ¯ //{ float orderDetailNeedQuantity = item.ScrapPcsQty - detailAssignQuantity; if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)) { ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/MesRworkOutboundOrderService.cs
@@ -26,6 +26,8 @@ using WIDESEA_OutboundRepository; using WIDESEA_Common.APIEnum; using WIDESEA_Common.OrderEnum; using OfficeOpenXml.FormulaParsing.Excel.Functions.Math; using System.Reflection.Metadata; namespace WIDESEA_OutboundService { @@ -66,63 +68,50 @@ Dt_MesRworkOutboundOrder assignOutOrder= new Dt_MesRworkOutboundOrder(); List<Dt_OutProStockInfo> outProStockInfos=new List<Dt_OutProStockInfo>(); List<Dt_LocationInfo> locationInfos=new List<Dt_LocationInfo>(); float originalNeedQuantity = mesRworkOutboundOrder.RequiredQuantity; float needQuantity = originalNeedQuantity; float needQty = mesRworkOutboundOrder.RequiredQuantity; //æ¥æ¾å¯ç¨åºå List<Dt_ProStockInfo> stockInfoss = _stockService.ProStockInfoService.GetUseableStocks(mesRworkOutboundOrder); if (!stockInfoss.Any()) { throw new Exception("æªæ¾å°å¯åé åºå"); } List<Dt_ProStockInfo> autoAssignStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss,mesRworkOutboundOrder, needQuantity,out float residueQuantity); mesRworkOutboundOrder.LockQuantity += needQuantity - residueQuantity; autoAssignStocks.OrderBy(x => x.proStockInfoDetails.FirstOrDefault()?.StockPcsQty).ToList(); proStockInfos.AddRange(autoAssignStocks); float assignQuantity = needQuantity - residueQuantity; //è·ååºåºåºå List<Dt_ProStockInfo> assignOutStocks = _stockService.ProStockInfoService.GetOutboundStocks(stockInfoss, mesRworkOutboundOrder, needQty, out float residueQuantity); mesRworkOutboundOrder.LockQuantity += needQty - residueQuantity; if (mesRworkOutboundOrder.RequiredQuantity > mesRworkOutboundOrder.LockQuantity) { throw new Exception($"产åç¼ç {mesRworkOutboundOrder.ProductCode},çæ¬{mesRworkOutboundOrder.ProductVersion}å¯åé æ°éä¸è¶³,å¯ç¨æ°é{mesRworkOutboundOrder.LockQuantity}"); } proStockInfos.AddRange(assignOutStocks); //åé åºåºçPCSæ°é float assignQuantity = needQty; //订åæç»çåºåºPCSæ°é float orderQuantity = mesRworkOutboundOrder.RequiredQuantity; bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode); for (int j = 0; j < autoAssignStocks.Count; j++) for (int j = 0; j < assignOutStocks.Count; j++) { //åºåºè®¢åæç»å·²åé æ°é float detailAssignQuantity = outProStockInfos .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder && x.PCode == mesRworkOutboundOrder.ProductCode && x.PVer == mesRworkOutboundOrder.ProductVersion && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) .Sum(x => x.AssignQuantity); float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == mesRworkOutboundOrder.Id).Sum(x => x.AssignQuantity); //åºåºè¯¦æ å·²åé æ°é float palletAssignQuantity = outProStockInfos .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder && x.PCode == mesRworkOutboundOrder.ProductCode && x.PVer == mesRworkOutboundOrder.ProductVersion && x.PalletCode == autoAssignStocks[j].PalletCode && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) .Sum(x => x.AssignQuantity); float palletOutboundQuantity = autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); if (palletAssignQuantity < palletOutboundQuantity)//妿åºåºè¯¦æ å·²åé æ°éå°äºæçå·²åé æ°éï¼åå¯ä»¥ç»§ç»æ·»å 该æçåºåºä¿¡æ¯ //æå©æ°é float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity; //çæåºåºè¯¦æ if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)) { float orderDetailNeedQuantity = mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity; if (orderDetailNeedQuantity > autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity) { mesRworkOutboundOrder.LockQuantity += autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity; Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], autoAssignStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity); outProStockInfos.Add(outStockLockInfo); } else { Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, autoAssignStocks[j], mesRworkOutboundOrder.RequiredQuantity-mesRworkOutboundOrder.LockQuantity); outProStockInfos.Add(outStockLockInfo); mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity; break; } mesRworkOutboundOrder.LockQuantity += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)); outProStockInfos.Add(outStockLockInfo); } else { Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(mesRworkOutboundOrder, assignOutStocks[j], mesRworkOutboundOrder.RequiredQuantity - detailAssignQuantity); outProStockInfos.Add(outStockLockInfo); mesRworkOutboundOrder.LockQuantity = mesRworkOutboundOrder.RequiredQuantity; break; } } locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(proStockInfos.Select(x => x.LocationCode).ToList())); List<string> locationArr = proStockInfos.Select(x => x.LocationCode).ToList(); locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr)); return (proStockInfos, mesRworkOutboundOrder, outProStockInfos, locationInfos); } @@ -311,6 +300,44 @@ }; return mesProductOutBound; } //åºåæ¿æ°æ®è½¬æ¢ public MesProductOutBound MesProOutBound(Dt_MesRworkOutboundOrder mesRworkOutboundOrder, List<Dt_ProStockInfoDetail> proStockInfoDetails) { //è·åä»åºä¿¡æ¯ Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == mesRworkOutboundOrder.WarehouseId); List<MesInventoryInfo> inventoryInfos = new List<MesInventoryInfo>(); foreach (var item in proStockInfoDetails.Where(x=>x.OutboundQuantity>0)) { int setinterval = (int)item.StockPcsQty / (int)item.SETQty; if (setinterval == 0) { throw new Exception($"{item.BagNo}è·åSETæ°é转æ¢å¤±è´¥"); } item.OutSETQty = (int)item.OutboundQuantity / setinterval; if (item.OutSETQty == 0) { throw new Exception($"{item.BagNo}è·åSETæ°é转æ¢å¤±è´¥"); } MesInventoryInfo mesInventoryInfo = new MesInventoryInfo() { Warhouseno = warehouse.WarehouseCode, InternalPackageNumber = item.BagNo, SetCount = (int)item.OutSETQty, EligiblePcsCount = (int)item.OutboundQuantity }; inventoryInfos.Add(mesInventoryInfo); } MesProductOutBound mesProductOutBound = new MesProductOutBound() { TaskNo = mesRworkOutboundOrder.TaskNo, ProductCode = mesRworkOutboundOrder.ProductCode, ProductVersion = mesRworkOutboundOrder.ProductVersion, DateCode = mesRworkOutboundOrder.DateCode, SaleOrder = mesRworkOutboundOrder.SaleOrder, InventoryInfo = inventoryInfos }; return mesProductOutBound; } /// <summary> /// æååºåæ¿åæ¥æ¥å£ /// </summary> ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/ProOutOrderDetailService.cs
@@ -106,87 +106,6 @@ { throw new Exception("æªæ¾å°æå订å"); } //List<Dt_ProOutOrderDetail> groupDetails = proOutOrderDetails.GroupBy(x => new { x.SaleOrder, x.PCode, x.PVer, x.PLot, x.DateCode }).Select(x => new Dt_ProOutOrderDetail() //{ // QtyPcs = x.Sum(x => x.QtyPcs) - x.Sum(x => x.OverQtyPcs), // SaleOrder = x.Key.SaleOrder, // PCode = x.Key.PCode, // PVer = x.Key.PVer, // PLot = x.Key.PLot, // DateCode = x.Key.DateCode, //}).ToList(); //foreach (var item in groupDetails) //{ // float needQty = item.QtyPcs; // //æ¥æ¾å¯ç¨åºå // List<Dt_ProStockInfo> stockInfoss = _stockInfoService.ProStockInfoService.GetUseableStocks(proOutOrder.WarehouseId, item); // if (!stockInfoss.Any()) // { // throw new Exception("æªæ¾å°å¯åé åºå"); // } // //è·ååºåºåºå // List<Dt_ProStockInfo> assignOutStocks = _stockInfoService.ProStockInfoService.GetOutboundStocks(stockInfoss, item, needQty, out float residueQuantity); // item.LockQtyPcs += needQty - residueQuantity; // if (item.QtyPcs> item.LockQtyPcs) // { // throw new Exception($"产åç¼ç {item.PCode}å¯åé æ°éä¸è¶³,å¯ç¨æ°é{item.LockQtyPcs}"); // } // outStocks.AddRange(assignOutStocks); // float assignQuantity = needQty - residueQuantity; // bool isCanLot = string.IsNullOrEmpty(item.PLot); // bool isCanDate = string.IsNullOrEmpty(item.DateCode); // List<Dt_ProOutOrderDetail> details = proOutOrderDetails // .Where(x =>x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode)) // .ToList(); // for (int i = 0; i < details.Count; i++) // { // float orderQuantity = details[i].QtyPcs; // for (int j = 0; j < assignOutStocks.Count; j++) // { // //åºåºè®¢åæç»å·²åé æ°é // float detailAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.OrderDetailId == details[i].Id).Sum(x => x.AssignQuantity); // float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity); // //åºåºè¯¦æ å·²åé æ°é // palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity);//åºåºè¯¦æ å·²åé æ°é // float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); // if (palletAssignQuantity < palletOutboundQuantity)//妿åºåºè¯¦æ å·²åé æ°éå°äºæçå·²åé æ°éï¼åå¯ä»¥ç»§ç»æ·»å 该æçåºåºä¿¡æ¯ // { // float orderDetailNeedQuantity = details[i].QtyPcs - detailAssignQuantity; // if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity) // { // details[i].LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity; // Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity) - palletAssignQuantity); // outProStockInfos.Add(outStockLockInfo); // } // else // { // Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, details[i], assignOutStocks[j], details[i].QtyPcs - details[i].LockQtyPcs); // outProStockInfos.Add(outStockLockInfo); // details[i].LockQtyPcs = details[i].QtyPcs; // break; // } // } // } // } // List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList(); // locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(locationArr)); //} foreach (var item in proOutOrderDetails) { float needQty = item.QtyPcs; @@ -206,39 +125,29 @@ outStocks.AddRange(assignOutStocks); //åé åºåºçPCSæ°é float assignQuantity = needQty; bool isCanLot = string.IsNullOrEmpty(item.PLot); bool isCanDate = string.IsNullOrEmpty(item.DateCode); //订åæç»çåºåºPCSæ°é float orderQuantity = item.QtyPcs; for (int j = 0; j < assignOutStocks.Count; j++) { //åºåºè®¢åæç»å·²åé æ°é float detailAssignQuantity = outProStockInfos.Where(x => x.OrderDetailId == item.Id).Sum(x => x.AssignQuantity); ////åºåºè¯¦æ å·²åé æ°é //float palletAssignQuantity = outProStockInfos.Where(x => x.PCode == item.PCode && x.PVer == item.PVer // && (isCanLot ? isCanLot : x.PLot == item.PLot) // && (isCanDate ? isCanDate : x.DateCode == item.DateCode) // && x.PalletCode == assignOutStocks[j].PalletCode).Sum(x => x.AssignQuantity); ////åºåºè¯¦æ å·²åé æ°é //float palletOutboundQuantity = assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); //if (palletAssignQuantity < palletOutboundQuantity)//妿åºåºè¯¦æ å·²åé æ°éå°äºæçå·²åé æ°éï¼åå¯ä»¥ç»§ç»æ·»å 该æçåºåºä¿¡æ¯ //{ float orderDetailNeedQuantity = item.QtyPcs - detailAssignQuantity; if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)) { item.LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)); outProStockInfos.Add(outStockLockInfo); } else { Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], item.QtyPcs - detailAssignQuantity); outProStockInfos.Add(outStockLockInfo); item.LockQtyPcs = item.QtyPcs; break; } //} float orderDetailNeedQuantity = item.QtyPcs - detailAssignQuantity; //çæåºåºè¯¦æ if (orderDetailNeedQuantity > assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)) { item.LockQtyPcs += assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity); Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], assignOutStocks[j].proStockInfoDetails.Sum(x => x.OutboundQuantity)); outProStockInfos.Add(outStockLockInfo); } else { Dt_OutProStockInfo outStockLockInfo = _outProStockInfoService.GetOutStockLockInfo(proOutOrder, item, assignOutStocks[j], item.QtyPcs - detailAssignQuantity); outProStockInfos.Add(outStockLockInfo); item.LockQtyPcs = item.QtyPcs; break; } } List<string> locationArr = outStocks.Select(x => x.LocationCode).ToList(); ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockRepository/ProStockInfoRepository.cs
@@ -74,7 +74,7 @@ { List<Dt_ProStockInfo>? proStockInfos = null; bool isCanDate = string.IsNullOrEmpty(mesRworkOutboundOrder.DateCode); proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode) && x.ProStockAttribute==ProStockAttributeEnum.å°¾æ°.ObjToInt()) proStockInfos = Db.Queryable<Dt_ProStockInfo>().Where(x => locationInfos.Contains(x.LocationCode)) .Includes(x => x.proStockInfoDetails) .Where(x => x.proStockInfoDetails .Any(v => v.SaleOrder == mesRworkOutboundOrder.SaleOrder ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/ProStockInfoService.cs
@@ -339,47 +339,6 @@ index++; } } else { for (int i = 0; i < stockInfos.Count; i++) { Dt_ProStockInfo stockInfo = stockInfos[i]; float useableStockQuantity = stockInfo.proStockInfoDetails .Where(x => x.SaleOrder == mesRworkOutboundOrder.SaleOrder && x.ProductCode == mesRworkOutboundOrder.ProductCode && x.ProductVersion == mesRworkOutboundOrder.ProductVersion && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) .Sum(x => x.StockPcsQty - x.OutboundQuantity); if (useableStockQuantity < needQuantity) { stockInfo.proStockInfoDetails.ForEach(x => x.OutboundQuantity = x.StockPcsQty); needQuantity -= useableStockQuantity; } else { stockInfo.proStockInfoDetails.ForEach(x => { if (x.StockPcsQty > x.OutboundQuantity && x.SaleOrder == mesRworkOutboundOrder.SaleOrder && x.ProductCode == mesRworkOutboundOrder.ProductCode && x.ProductVersion == mesRworkOutboundOrder.ProductVersion && (isCanDate ? isCanDate : x.DateCode == mesRworkOutboundOrder.DateCode)) { if (x.StockPcsQty - x.OutboundQuantity >= needQuantity) { x.OutboundQuantity += needQuantity; needQuantity = 0; } else { needQuantity -= (x.StockPcsQty - x.OutboundQuantity); x.OutboundQuantity = x.StockPcsQty; } } }); } assignOutStocks.Add(stockInfo); } } residueQuantity = needQuantity; return assignOutStocks; } ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/MesProductService.cs
@@ -541,6 +541,7 @@ { return content.Error($"æåºä»»å¡å{model.TaskNo}å·²åå¨"); } //çææåºå Dt_MesRworkOutboundOrder mesRworkOutboundOrder = new Dt_MesRworkOutboundOrder() { WarehouseId = warehouse.WarehouseId, @@ -560,6 +561,7 @@ List<Dt_ProStockInfo>? proStockInfos = null; List<Dt_OutProStockInfo>? outProStockInfos = null; List<Dt_LocationInfo>? locationInfos = null; List<Dt_ProStockInfoDetail> proStockInfoDetails = new List<Dt_ProStockInfoDetail>(); //åé åºåçææåºä»»å¡ (List<Dt_ProStockInfo>?, Dt_MesRworkOutboundOrder?, List<Dt_OutProStockInfo>?, List<Dt_LocationInfo>) result = _outboundService.RworkOutboundOrderService.AssignMesStocks(mesRworkOutboundOrder); if (result.Item1 != null && result.Item1.Count > 0) @@ -585,6 +587,10 @@ x.TargetAddress = "5236"; x.OrderNo = mesRworkOutboundOrder.TaskNo; }); proStockInfos.ForEach(x => { proStockInfoDetails.AddRange(x.proStockInfoDetails); }); _unitOfWorkManage.BeginTran(); int id = BaseDal.AddData(tasks); @@ -604,6 +610,12 @@ } } _outboundService.RworkOutboundOrderService.Repository.AddData(mesRworkOutboundOrder); //MESæååºåæ¿åºåºåæ¥ WebResponseContent responseContent = _outboundService.RworkOutboundOrderService.ProductOutBoundSync(_outboundService.RworkOutboundOrderService.MesProOutBound(mesRworkOutboundOrder, proStockInfoDetails)); if (!responseContent.Status) { throw new Exception("忥MESåºåæ¿åºåºå¤±è´¥,é误:" + responseContent.Message); } _unitOfWorkManage.CommitTran(); return content.OK("æä¾è¿åºåæ¥æ¶æå"); } ´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -1073,7 +1073,6 @@ } proStockInfoDetails.ForEach(x => { x.OutboundQuantity = 0; x.ProOutDetailStatus = StockStatusEmun.åºåºå®æ.ObjToInt(); }); proStockInfo.StockStatus = StockStatusEmun.åºåºå®æ.ObjToInt(); @@ -1087,6 +1086,7 @@ //è´§ä½åå¨è®°å½ int beforeStatus = locationInfo.LocationStatus; locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt(); _outboundRepository.ErpProScrapDetailRepository.UpdateData(erpProScrapSheetDetail); _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, locationInfo.WarehouseId); _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, erpProScrapSheet?.ProScrapSheetOrderNo ?? "", task.TaskNum); _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);