wangxinhui
昨天 a8756c3526832332db4ef5685348d9b188c2bf2b
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs
@@ -46,58 +46,100 @@
        {
            try
            {
                List<StockViewDTO> stockViewDTOs = new List<StockViewDTO>();
                string where = string.Empty;
                ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Includes(x => x.Details);
                if (!string.IsNullOrEmpty(options.Wheres))
                {
                    try
                    {
                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                        if (searchParametersList.Count > 0)
                        if (searchParametersList?.Any() == true)
                        {
                            foreach (var param in searchParametersList)
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
                                if (searchParameters != null)
                                switch (param.Name)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                                    case var name when name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.Details.Any(v => v.MaterielCode.Contains(param.Value.ToString())));
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.Details.Any(v => v.BatchNo.Contains(param.Value.ToString())));
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfo.LocationCode).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.LocationCode == param.Value.ToString());
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfo.CreateDate).FirstLetterToLower():
                                        if (DateTime.TryParse(param.Value?.ToString(), out DateTime minDate))
                                        {
                                            LinqExpressionType expressionType = param.DisplayType.GetLinqCondition();
                                            if(expressionType == LinqExpressionType.ThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate >= minDate);
                                            }
                                            else if(expressionType == LinqExpressionType.LessThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate <= minDate);
                                            }
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfoDetail.EffectiveDate).FirstLetterToLower():
                                        // å‰ç«¯ä¼ é€’的参数需是 yyyy-MM-dd æ ¼å¼ï¼ˆå¦‚ "2025-05-08"),直接作为字符串处理
                                        string effectiveDateStr = param.Value?.ToString().Trim();
                                        if (!string.IsNullOrEmpty(effectiveDateStr) && effectiveDateStr.Length == 10)
                                        {
                                            LinqExpressionType expressionType = param.DisplayType.GetLinqCondition();
                                            if (expressionType == LinqExpressionType.ThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.Details
                                                    .Any(d =>!string.IsNullOrEmpty(d.EffectiveDate) && d.EffectiveDate.CompareTo(effectiveDateStr) >= 0));
                                            }
                                            else if (expressionType == LinqExpressionType.LessThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.Details
                                                    .Any(d =>!string.IsNullOrEmpty(d.EffectiveDate) && d.EffectiveDate.CompareTo(effectiveDateStr) <= 0));
                                            }
                                        }
                                        break;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                                }
                            }
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value)));
                                }
                            }
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.LocationCode).FirstLetterToLower());
                                if (searchParameters != null)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.LocationCode == searchParameters.Value);
                                }
                            }
                        }
                    }
                    catch { }
                }
                string whereSto = GetDataRole(typeof(Dt_StockInfo));
                sugarQueryable1 = sugarQueryable1.Where(whereSto);
                EntityProperties.ValidatePageOptions(options, ref sugarQueryable1);
                string whereLo = GetDataRole(typeof(Dt_LocationInfo));
                ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>().Where(whereLo);
                ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>()
                    .Where(whereLo);
                EntityProperties.ValidatePageOptions(options, ref sugarQueryable);
                ISugarQueryable<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a)
                    => new StockViewDTO
                ISugarQueryable<StockViewDTO> list = sugarQueryable1
                    .InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode)
                    .Select((b, a) => new StockViewDTO
                    {
                        LocationCode = b.LocationCode,
                        Expirationlabel = b.Expirationlabel,
                        Column = a.Column,
                        WarehouseId = b.WarehouseId,
                        CreateDate = b.CreateDate,
@@ -119,12 +161,16 @@
                        Details = b.Details,
                    });
                var pklist = sugarQueryable1.Where(b => b.LocationCode == "平库位").Select(b => new StockViewDTO
                // å¹³åº“位数据查询
                var pklist = sugarQueryable1
                    .Where(b => b.LocationCode == "平库位")
                    .Select(b => new StockViewDTO
                {
                    LocationCode = b.LocationCode,
                    Column = 0,
                    WarehouseId = b.WarehouseId,
                    CreateDate = b.CreateDate,
                        Expirationlabel = b.Expirationlabel,
                    Creater = b.Creater,
                    Depth = 0,
                    EnalbeStatus = EnableStatusEnum.Normal.ObjToInt(),
@@ -145,26 +191,25 @@
                int totalCount = 0;
                int pktotalCount = 0;
                stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount);
                var stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount);
                stockViewDTOs.AddRange(pklist.ToPageList(options.Page, options.Rows, ref pktotalCount));
                stockViewDTOs.ForEach(x =>
                {
                    x.MaterielCode = string.Join(",", x.Details.Select(x => x.MaterielCode).Distinct());
                    x.BatchNo = string.Join(",", x.Details.Select(x => x.BatchNo).Distinct());
                    x.MaterielCode = string.Join(",", x.Details.Select(d => d.MaterielCode).Distinct());
                    x.BatchNo = string.Join(",", x.Details.Select(d => d.BatchNo).Distinct());
                    x.MaterielSpec = x.Details.FirstOrDefault()?.MaterielSpec ?? "";
                    x.MaterielName = x.Details.FirstOrDefault()?.MaterielName ?? "";
                }
                );
                });
                return new PageGridData<StockViewDTO>(totalCount + pktotalCount, stockViewDTOs);
            }
            catch (Exception ex)
            {
            }
            return new PageGridData<StockViewDTO>();
        }
        public virtual object GetDetailPage(PageDataOptions pageData)
        {
@@ -224,28 +269,76 @@
                    try
                    {
                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                        if (searchParametersList.Count > 0)
                        if (searchParametersList?.Any() == true)
                        {
                            foreach (var param in searchParametersList)
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
                                if (searchParameters != null)
                                switch (param.Name)
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value)));
                                    case var name when name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.Details.Any(v => v.MaterielCode.Contains(param.Value.ToString())));
                                }
                                        break;
                                    case var name when name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                        {
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.Details.Any(v => v.BatchNo.Contains(param.Value.ToString())));
                            }
                                        break;
                                    case var name when name == nameof(Dt_StockInfo.LocationCode).FirstLetterToLower():
                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
                            {
                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower());
                                if (searchParameters != null)
                                            sugarQueryable1 = sugarQueryable1
                                                .Where(x => x.LocationCode == param.Value.ToString());
                                        }
                                        break;
                                    case var name when name == nameof(Dt_StockInfo.CreateDate).FirstLetterToLower():
                                        if (DateTime.TryParse(param.Value?.ToString(), out DateTime minDate))
                                {
                                    sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value)));
                                            LinqExpressionType expressionType = param.DisplayType.GetLinqCondition();
                                            if (expressionType == LinqExpressionType.ThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate >= minDate);
                                            }
                                            else if (expressionType == LinqExpressionType.LessThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.CreateDate <= minDate);
                                }
                            }
                                        break;
                                    case var name when name == nameof(Dt_StockInfoDetail.EffectiveDate).FirstLetterToLower():
                                        // å‰ç«¯ä¼ é€’的参数需是 yyyy-MM-dd æ ¼å¼ï¼ˆå¦‚ "2025-05-08"),直接作为字符串处理
                                        string effectiveDateStr = param.Value?.ToString().Trim();
                                        if (!string.IsNullOrEmpty(effectiveDateStr) && effectiveDateStr.Length == 10)
                                        {
                                            LinqExpressionType expressionType = param.DisplayType.GetLinqCondition();
                                            if (expressionType == LinqExpressionType.ThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.Details
                                                    .Any(d => !string.IsNullOrEmpty(d.EffectiveDate) && d.EffectiveDate.CompareTo(effectiveDateStr) >= 0));
                                            }
                                            else if (expressionType == LinqExpressionType.LessThanOrEqual)
                                            {
                                                sugarQueryable1 = sugarQueryable1.Where(x => x.Details
                                                    .Any(d => !string.IsNullOrEmpty(d.EffectiveDate) && d.EffectiveDate.CompareTo(effectiveDateStr) <= 0));
                        }
                    }
                    catch { }
                                        break;
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
                string whereSto = GetDataRole(typeof(Dt_StockInfo));
                sugarQueryable1 = sugarQueryable1.Where(whereSto);
@@ -261,6 +354,7 @@
                    {
                        LocationCode = b.LocationCode,
                        Column = a.Column,
                        Expirationlabel = b.Expirationlabel,
                        WarehouseId = b.WarehouseId,
                        CreateDate = b.CreateDate,
                        Creater = b.Creater,
@@ -286,6 +380,7 @@
                    LocationCode = b.LocationCode,
                    Column = 0,
                    WarehouseId = b.WarehouseId,
                    Expirationlabel = b.Expirationlabel,
                    CreateDate = b.CreateDate,
                    Creater = b.Creater,
                    Depth = 0,