647556386
2026-03-09 e069161ee474fe9bfd6571eb293aeb7e9f4d4883
回库不拣选功能
已修改1个文件
87 ■■■■■ 文件已修改
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -2235,8 +2235,93 @@
                    if (lockInfo != null && lockInfo.SortedQuantity != lockInfo.AssignQuantity)
                    {
                        return content.Error($"托盘{palletCode}库存,在单据{lockInfo.OrderNo}里面还未拣选完成,不允许回库");
                        // 1. è®¡ç®—需要回滚的总数量
                        decimal? rollbackTotalQuantity = lockInfo.AssignQuantity - lockInfo.SortedQuantity;
                        // ç¡®ä¿å›žæ»šæ•°é‡ä¸ºæ­£æ•°
                        if (rollbackTotalQuantity <= 0)
                        {
                            // æ²¡æœ‰éœ€è¦å›žæ»šçš„æ•°é‡
                            stock.StockStatus = (int)StockStatusEmun.入库确认;
                            stock.LocationCode = "";
                        }
                        try
                        {
                            //处理OrderDetailIds,分割并转换为ID列表
                            List<long> orderDetailIds = new List<long>();
                            if (!string.IsNullOrEmpty(lockInfo.OrderDetailIds))
                            {
                                orderDetailIds = lockInfo.OrderDetailIds.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                                    .Select(id =>
                                    {
                                        if (long.TryParse(id.Trim(), out long result))
                                        {
                                            return result;
                                        }
                                        return 0; // æ— æ•ˆID标记为0
                                    })
                                    .Where(id => id > 0)
                                    .OrderByDescending(id => id)
                                    .ToList();
                            }
                            if (orderDetailIds.Count == 0)
                            {
                                return WebResponseContent.Instance.Error("单据锁定出库单明细Id无效,检查锁定出库数据是否正确");
                            }
                            //查询对应的订单明细
                            List<Dt_OutboundOrderDetail> orderDetails = _outboundRepository.Db.Queryable<Dt_OutboundOrderDetail>()
                                .Where(x => orderDetailIds.Contains(x.Id))
                                .ToList();
                            if (orderDetails.Count == 0)
                            {
                                return WebResponseContent.Instance.Error("未找到可回滚明细,请检查出库单明细");
                            }
                            decimal remainingRollbackQty = (decimal)rollbackTotalQuantity;
                            foreach (var detail in orderDetails)
                            {
                                if (remainingRollbackQty <= 0)
                                {
                                    break;
                                }
                                // è®¡ç®—该明细的可回滚数量
                                decimal availableRollbackQty = detail.LockQuantity - detail.OverOutQuantity - detail.MoveQty;
                                availableRollbackQty = Math.Max(0, availableRollbackQty);
                                if (availableRollbackQty <= 0)
                                {
                                    continue; // è¯¥æ˜Žç»†æ— å¯å›žæ»šæ•°é‡ï¼Œè·³è¿‡
                                }
                                // è®¡ç®—本次实际回滚数量(取可回滚数量和剩余需要回滚数量的较小值)
                                decimal actualRollbackQty = Math.Min(availableRollbackQty, remainingRollbackQty);
                                detail.LockQuantity -= actualRollbackQty;
                                detail.LockQuantity = Math.Max(0, detail.LockQuantity);
                                _detailRepository.UpdateData(detail);
                                //更新剩余需要回滚的数量
                                remainingRollbackQty -= actualRollbackQty;
                            }
                            if (remainingRollbackQty > 0)
                            {
                                return WebResponseContent.Instance.Error($"剩余回滚数量{remainingRollbackQty}");
                            }
                            _outboundLockInfoRepository.DeleteAndMoveIntoHty(lockInfo, WIDESEA_Core.Enums.OperateTypeEnum.人工删除);
                        }
                        catch (Exception ex)
                        {
                            return WebResponseContent.Instance.Error(ex.Message);
                        }
                    }
                    stock.StockStatus = (int)StockStatusEmun.入库确认;
                    stock.LocationCode = "";
                }