647556386
2 天以前 3460ffdc967b65ea67c959212c2505a19008401e
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -358,7 +358,7 @@
                _detailRepository.UpdateData(outboundOrderDetails);
                if (pickedDetails.Any())
                {
                    UpdateStockStatus(pickedDetails.Select(x => x.PalletCode).ToList(), StockStatusEmun.出库锁定.ObjToInt());
                    UpdateStockStatus(pickedDetails.Select(x => x.PalletCode).ToList(), StockStatusEmun.出库锁定.ObjToInt(),outboundOrder);
                    UpdateLocationStatus(pickedDetails.Select(x => x.LocationCode).ToList(), LocationStatusEnum.Lock.ObjToInt());
                }
                //重检单不拣选,去掉锁定记录回库,再次组盘时扣除原条码
@@ -984,11 +984,16 @@
            }
        }
        public bool UpdateStockStatus(List<string> palletCodes, int status)
        public bool UpdateStockStatus(List<string> palletCodes, int status,Dt_OutboundOrder outOrder)
        {
            try
            {
                List<Dt_StockInfo> stockInfos = _stockInfoRepository.QueryData(x => palletCodes.Contains(x.PalletCode));
                ///智仓调智仓单据记录
                if(outOrder.OrderType == 117)
                {
                    stockInfos.ForEach(stockInfo => stockInfo.Remark = outOrder.OrderNo);
                }
                stockInfos.ForEach(stockInfo => stockInfo.StockStatus = status);
                _stockInfoRepository.UpdateData(stockInfos);
                return true;
@@ -2251,6 +2256,48 @@
                    return content.Error($"未找到托盘{palletCode}库存信息不允许回库");
                }
                var task = await _taskRepository.Db.Queryable<Dt_Task>()
                    .Where(x => x.PalletCode == palletCode)
                    .FirstAsync();
                if (task != null)
                {
                    return content.Error($"托盘{palletCode}存在任务回库失败!");
                }
                // åˆ†é…æ–°è´§ä½
                var newLocation = _locationInfoService.AssignLocation(stock.LocationType);
                if (newLocation == null)
                {
                    return WebResponseContent.Instance.Error("没有空闲库位可回库");
                }
                if(stock.Remark !=null && stock.Remark != "")
                {
                    Dt_OutboundOrder outboundOrder = _outboundRepository.QueryFirst(x => x.OrderNo == stock.Remark && x.OrderType == 117 && x.OrderStatus == OutOrderStatusEnum.出库中.ObjToInt());
                    if (outboundOrder != null)
                    {
                        // 1. æ ¹æ®è®¢å•号查询调拨物料信息
                        List<Dt_AllocateMaterialInfo> allocateMaterialInfos = _allocateMaterialInfoRepository.QueryData(x => x.OrderNo == outboundOrder.OrderNo);
                        // 2. åˆ¤æ–­æ˜¯å¦å­˜åœ¨è°ƒæ‹¨ç‰©æ–™ï¼Œæ²¡æœ‰åˆ™ç›´æŽ¥è·³è¿‡æ ¡éªŒ
                        if (allocateMaterialInfos != null && allocateMaterialInfos.Any())
                        {
                            // 3. æå–所有 Barcode é›†åˆ
                            List<string> barcodes = allocateMaterialInfos.Select(x => x.Barcode).ToList();
                            // 4. æ ¹æ® Barcode æ‰¹é‡æŸ¥è¯¢åº“存明细
                            List<Dt_StockInfoDetail> stockInfoDetails = _stockDetailRepository.QueryData(x => barcodes.Contains(x.Barcode) && x.OrderNo == outboundOrder.OrderNo);
                            // 5. æ•°é‡å¯¹æ¯”:不相等 â†’ æœªå…¨éƒ¨ç»„盘完成
                            if (barcodes.Count != stockInfoDetails.Count)
                            {
                                return WebResponseContent.Instance.Error($"智仓调智仓单据{outboundOrder.OrderNo}尚未全部组盘完成,请先进行组盘再回库单据相关料箱");
                            }
                        }
                    }
                }
                if (stock.Details.Count <= 0)
                {
                    stock.PalletType = (int)PalletTypeEnum.Empty;
@@ -2354,23 +2401,6 @@
                    stock.StockStatus = (int)StockStatusEmun.入库确认;
                    stock.LocationCode = "";
                }
                var task = await _taskRepository.Db.Queryable<Dt_Task>()
                    .Where(x => x.PalletCode == palletCode)
                    .FirstAsync();
                if (task != null)
                {
                    return content.Error($"托盘{palletCode}存在任务回库失败!");
                }
                // åˆ†é…æ–°è´§ä½
                var newLocation = _locationInfoService.AssignLocation(stock.LocationType);
                if(newLocation == null)
                {
                    return WebResponseContent.Instance.Error("没有空闲库位可回库");
                }
                var newTask = new Dt_Task()