huangxiaoqiang
4 天以前 f025b0410b4424d5bc812524471a32ebe2072504
更新库存查询逻辑并添加模型引用

在 `Dt_TaskService.cs` 文件中,添加了对 `WIDESEA_Model.Models` 的引用。修改了查询逻辑,注释掉了原有的查询代码,并引入了新的查询方式。新的查询方式首先获取符合条件的库存列表,然后通过循环检查每个库存项是否有匹配的库存详情,最终确定满足条件的库存项。如果没有找到满足条件的库存,将抛出异常提示。
已修改1个文件
47 ■■■■ 文件已修改
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code Management/WMS/WIDESEA_WMSServer/WIDESEA_StorageTaskServices/Task/Partial/Dt_TaskService.cs
@@ -6,6 +6,7 @@
using WIDESEA_Core.Const;
using WIDESEA_DTO.MOM;
using WIDESEA_DTO.WMS;
using WIDESEA_Model.Models;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
@@ -1115,19 +1116,41 @@
            //    .FirstOrDefault();
            // 修改后的查询代码
            #endregion
            var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                                .Includes(x => x.LocationInfo)
                                .Includes(x => x.StockInfoDetails)
                                .Where(x => x.ProductionLine == station.productLine)
                                .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true)
                                // 增加对 LocationInfo 的空值检查
                                .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
                                // 增加对 LocationInfo 的空值检查
                                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                                .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
                                .OrderBy(x => x.OutboundTime)
                                .FirstAsync();
            //var stockInfo = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
            //                    .Includes(x => x.LocationInfo)
            //                    .Includes(x => x.StockInfoDetails)
            //                    .Where(x => x.ProductionLine == station.productLine)
            //                    .Where(x => x.AreaCode == "CWSC3" && x.IsFull == true)
            //                    // 增加对 LocationInfo 的空值检查
            //                    .Where(x => x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
            //                    // 增加对 LocationInfo 的空值检查
            //                    .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
            //                    .WhereIF(!materielCodes.IsNullOrEmpty(), x => x.StockInfoDetails.Any(y => materielCodes.Contains(y.MaterielCode)))
            //                    .OrderBy(x => x.OutboundTime)
            //                    .FirstAsync();
            DtStockInfo stockInfo = null;
            var stockInfoList = await _stockInfoRepository.Db.Queryable<DtStockInfo>()
                .Includes(x => x.LocationInfo)
                .Where(x => x.ProductionLine == station.productLine
                        && x.AreaCode == "CWSC3"
                        && x.IsFull == true
                        && x.LocationInfo.LocationStatus == (int)LocationEnum.InStock)
                .WhereIF(!deviceCode.IsNullOrEmpty(), x => deviceCode.Contains(x.LocationInfo.RoadwayNo))
                .OrderBy(x => x.OutboundTime)
                .ToListAsync();
            foreach (var stock in stockInfoList)
            {
                var hasMatchingDetail = await _stockInfoRepository.Db.Queryable<DtStockInfoDetail>()
                    .Where(d => d.StockId == stock.Id && materielCodes.Contains(d.MaterielCode))
                    .AnyAsync();
                if (hasMatchingDetail)
                {
                    stockInfo = stock;
                }
            }
            if (stockInfo == null) throw new Exception($"库内{station.productLine}无满足条件的库存可出库");
            DtLocationInfo locationInfo = _locationRepository.QueryFirst(x => x.AreaId == 5 && x.LocationCode == stockInfo.LocationCode);