1
heshaofeng
2026-03-25 37454e625df68d40897112b2e8c2e3cf4d7163e3
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundQueryService.cs
@@ -4,6 +4,7 @@
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using SqlSugar.Extensions;
using WIDESEA_Common.StockEnum;
using WIDESEA_Core;
using WIDESEA_DTO.CalcOut;
@@ -26,27 +27,132 @@
            }
        }
        //public WebResponseContent QueryPickingTasks(string palletCode, string orderNo)
        //{
        //    try
        //    {
        //        Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
        //        var outboundOrder = _outboundRepository.QueryFirst(x => x.OrderNo == orderNo);
        //        bool isMatMixed = false;
        //        if (stockInfo != null)
        //        {
        //            isMatMixed = stockInfo.Details.GroupBy(x => new
        //            {
        //                x.MaterielCode,
        //                x.MaterielName,
        //                x.BatchNo,
        //                x.SupplyCode,
        //                x.WarehouseCode
        //            }).Count() > 1;
        //        }
        //        List<Dt_OutStockLockInfo> outStockLockInfos = _outboundLockInfoRepository.QueryData(x => x.PalletCode == palletCode && x.OrderNo == orderNo);
        //        return WebResponseContent.Instance.OK(data: new { outStockLockInfos, stockInfo, isMatMixed });
        //    }
        //    catch (Exception ex)
        //    {
        //        return WebResponseContent.Instance.Error(ex.Message);
        //    }
        //}
        public WebResponseContent QueryPickingTasks(string palletCode, string orderNo)
        {
            try
            {
                Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == palletCode).Includes(x => x.Details).First();
                Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>()
                    .Where(x => x.PalletCode == palletCode)
                    .Includes(x => x.Details)
                    .First();
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundLockInfoRepository
                    .QueryData(x => x.PalletCode == palletCode && x.OrderNo == orderNo);
                bool isMatMixed = false;
                if (stockInfo != null)
                bool orderOver = false;
                decimal sumQty = 0;
                if (stockInfo != null && stockInfo.Details != null && stockInfo.Details.Any())
                {
                    isMatMixed = stockInfo.Details.GroupBy(x => new
                    if (outStockLockInfos.FirstOrDefault() != null)
                    {
                        x.MaterielCode,
                        x.MaterielName,
                        x.BatchNo,
                        x.SupplyCode,
                        x.WarehouseCode
                    }).Count() > 1;
                        bool includeBatchNo = !string.IsNullOrEmpty(outStockLockInfos.FirstOrDefault().BatchNo);
                        bool includeSupplyCode = !string.IsNullOrEmpty(outStockLockInfos.FirstOrDefault().SupplyCode);
                        var orderId = outStockLockInfos.FirstOrDefault().OrderDetailIds.Split(",");
                        foreach (var item in orderId)
                        {
                            Dt_OutboundOrderDetail outboundOrderDetail = _outboundRepository.Db.Queryable<Dt_OutboundOrderDetail>().Where(x=>x.Id == item.ObjToInt()).First();
                            if(outboundOrderDetail == null)
                            {
                                return WebResponseContent.Instance.Error("该托盘的出库明细未找到");
                            }
                            sumQty += (outboundOrderDetail.OrderQuantity - outboundOrderDetail.OverOutQuantity - outboundOrderDetail.MoveQty);
                        }
                        if(sumQty < outStockLockInfos.FirstOrDefault().AssignQuantity)
                        {
                            orderOver = true;
                        }
                        if (includeBatchNo && includeSupplyCode)
                        {
                            isMatMixed = stockInfo.Details.GroupBy(x => new
                            {
                                x.MaterielCode,
                                x.MaterielName,
                                x.BatchNo,
                                x.SupplyCode,
                                x.WarehouseCode
                            }).Count() > 1;
                        }
                        else if (includeBatchNo && !includeSupplyCode)
                        {
                            isMatMixed = stockInfo.Details.GroupBy(x => new
                            {
                                x.MaterielCode,
                                x.MaterielName,
                                x.BatchNo,
                                x.WarehouseCode
                            }).Count() > 1;
                        }
                        else if (!includeBatchNo && includeSupplyCode)
                        {
                            isMatMixed = stockInfo.Details.GroupBy(x => new
                            {
                                x.MaterielCode,
                                x.MaterielName,
                                x.SupplyCode,
                                x.WarehouseCode
                            }).Count() > 1;
                        }
                        else
                        {
                            isMatMixed = stockInfo.Details.GroupBy(x => new
                            {
                                x.MaterielCode,
                                x.MaterielName,
                                x.WarehouseCode
                            }).Count() > 1;
                        }
                    }
                    else
                    {
                        isMatMixed = stockInfo.Details.GroupBy(x => new
                        {
                            x.MaterielCode,
                            x.MaterielName,
                            x.WarehouseCode
                        }).Count() > 1;
                        Dt_OutStockLockInfo outStockLockInfo = _outboundLockInfoRepository.QueryFirst(x=>x.PalletCode == palletCode);
                        if (outStockLockInfo != null)
                        {
                            return WebResponseContent.Instance.Error($"该托盘在该单据中无拣选记录,请前往{outStockLockInfo.OrderNo}单据中进行拣货操作");
                        }
                    }
                }
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundLockInfoRepository.QueryData(x => x.PalletCode == palletCode && x.OrderNo == orderNo);
                return WebResponseContent.Instance.OK(data: new { outStockLockInfos, stockInfo, isMatMixed });
                return WebResponseContent.Instance.OK(data: new { outStockLockInfos, stockInfo, isMatMixed, orderOver });
            }
            catch (Exception ex)
            {