From a8756c3526832332db4ef5685348d9b188c2bf2b Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 13 九月 2025 08:36:44 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/MeiRuiAn/HuaiAn

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs |  243 +++++++++++++++++++++++++++++++++--------------
 1 files changed, 169 insertions(+), 74 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs"
index 843d8f7..0bcc37b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/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;
 
-                            {
-                                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);
-                                }
-                            }
+                                    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 { }
+                    catch (Exception ex)
+                    {
+                    }
                 }
+
                 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,52 +161,55 @@
                         Details = b.Details,
                     });
 
-                var pklist = sugarQueryable1.Where(b => b.LocationCode == "骞冲簱浣�").Select(b => new StockViewDTO
-                {
-                    LocationCode = b.LocationCode,
-                    Column = 0,
-                    WarehouseId = b.WarehouseId,
-                    CreateDate = b.CreateDate,
-                    Creater = b.Creater,
-                    Depth = 0,
-                    EnalbeStatus = EnableStatusEnum.Normal.ObjToInt(),
-                    Layer = 0,
-                    LocationName = "骞冲簱浣�",
-                    LocationStatus = LocationStatusEnum.InStock.ObjToInt(),
-                    LocationType = LocationTypeEnum.Undefined.ObjToInt(),
-                    Modifier = b.Modifier,
-                    ModifyDate = b.ModifyDate,
-                    PalletCode = b.PalletCode,
-                    StockRemark = b.Remark,
-                    RoadwayNo = "骞冲簱",
-                    Row = 0,
-                    StockId = b.Id,
-                    StockStatus = b.StockStatus,
-                    Details = b.Details,
-                });
+                // 骞冲簱浣嶆暟鎹煡璇�
+                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(),
+                        Layer = 0,
+                        LocationName = "骞冲簱浣�",
+                        LocationStatus = LocationStatusEnum.InStock.ObjToInt(),
+                        LocationType = LocationTypeEnum.Undefined.ObjToInt(),
+                        Modifier = b.Modifier,
+                        ModifyDate = b.ModifyDate,
+                        PalletCode = b.PalletCode,
+                        StockRemark = b.Remark,
+                        RoadwayNo = "骞冲簱",
+                        Row = 0,
+                        StockId = b.Id,
+                        StockStatus = b.StockStatus,
+                        Details = b.Details,
+                    });
 
                 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()))
+                                        {
+                                            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;
                                 }
                             }
-
-                            {
-                                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)));
-                                }
-                            }
-
                         }
-
                     }
-                    catch { }
+                    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,

--
Gitblit v1.9.3