From 4a1765ea61fb8706bddbf90b91b310e2ce0e9f7d Mon Sep 17 00:00:00 2001
From: yangpeixing <yangpeixing@hnkhzn.com>
Date: 星期一, 02 三月 2026 14:59:48 +0800
Subject: [PATCH] 1

---
 WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs |  231 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 203 insertions(+), 28 deletions(-)

diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs
index 8f4b3b5..e8982d8 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs
@@ -1,4 +1,6 @@
 锘�
+using Magicodes.ExporterAndImporter.Core;
+using Magicodes.ExporterAndImporter.Excel;
 using Microsoft.AspNetCore.Http;
 using SqlSugar;
 using System;
@@ -44,7 +46,7 @@
                 {
                     try
                     {
-                        
+
                         List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
                         if (searchParametersList?.Any() == true)
                         {
@@ -52,6 +54,20 @@
                             {
                                 switch (param.Name)
                                 {
+                                    case var name when name == nameof(Dt_StockInfo.PalletCode).FirstLetterToLower():
+                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
+                                        {
+                                            sugarQueryable1 = sugarQueryable1
+                                                .Where(x => x.PalletCode.Contains(param.Value.ToString()));
+                                        }
+                                        break;
+                                    case var name when name == nameof(Dt_StockInfo.System).FirstLetterToLower():
+                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
+                                        {
+                                            sugarQueryable1 = sugarQueryable1
+                                                .Where(x => x.System.Contains(param.Value.ToString()));
+                                        }
+                                        break;
                                     case var name when name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower():
                                         if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                         {
@@ -71,7 +87,7 @@
                                         if (!string.IsNullOrEmpty(param.Value?.ToString()))
                                         {
                                             sugarQueryable1 = sugarQueryable1
-                                                .Where(x => x.LocationCode == param.Value.ToString());
+                                                .Where(x => x.LocationCode.Contains(param.Value.ToString()));
                                         }
                                         break;
                                     case var name when name == nameof(Dt_LocationInfo.LocationStatus).FirstLetterToLower():
@@ -117,7 +133,180 @@
                     {
                     }
                 }
-                
+
+
+                ISugarQueryable<StockViewDTO> list = sugarQueryable1
+                    .InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode)
+                    .Select((b, a) => new StockViewDTO
+                    {
+                        LocationCode = b.LocationCode,
+                        Column = a.Column,
+                        WarehouseId = b.WarehouseId,
+                        CreateDate = b.CreateDate,
+                        Creater = b.Creater,
+                        Depth = a.Depth,
+                        EnalbeStatus = a.EnableStatus,
+                        Layer = a.Layer,
+                        LocationName = a.LocationName,
+                        LocationStatus = a.LocationStatus,
+                        LocationType = a.LocationType,
+                        Modifier = b.Modifier,
+                        ModifyDate = b.ModifyDate,
+                        PalletCode = b.PalletCode,
+                        StockRemark = b.Remark,
+                        RoadwayNo = a.RoadwayNo,
+                        System = b.System,
+                        Row = a.Row,
+                        StockId = b.Id,
+                        StockStatus = b.StockStatus,
+                        Details = b.Details,
+                    });
+
+                int totalCount = 0;
+                var stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount);
+
+                stockViewDTOs.ForEach(x =>
+                {
+                    x.MaterielCode = string.Join(",", x.Details.Select(d => d.MaterielCode).Distinct());
+                    x.BatchNo = string.Join(",", x.Details.Select(d => d.BatchNo).Distinct());
+                    x.SupplierBatch = string.Join(",", x.Details.Select(d => d.SupplierBatch).Distinct());
+                    x.MaterielSpec = x.Details.FirstOrDefault()?.MaterieSpec ?? "";
+                    x.MaterielName = x.Details.FirstOrDefault()?.MaterielName ?? "";
+                });
+
+                return new PageGridData<StockViewDTO>(totalCount, stockViewDTOs);
+            }
+            catch (Exception ex)
+            {
+            }
+            return new PageGridData<StockViewDTO>();
+        }
+
+        public virtual object GetDetailPage(PageDataOptions pageData)
+        {
+            Type t = typeof(StockViewDTO);
+
+            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
+            string keyName = t.GetKeyName();
+            ////鐢熸垚鏌ヨ鏉′欢
+            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
+            int totalCount = 0;
+            PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
+            if (propertyInfo != null)
+            {
+                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
+                Navigate? navigate = propertyInfo.GetCustomAttribute<Navigate>();
+                if (navigate != null)
+                {
+                    List<ExpandoObject> list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
+                    return new PageGridData<ExpandoObject>(totalCount, list);
+                }
+            }
+            return new PageGridData<object>(total: 0, null);
+        }
+
+        public virtual WebResponseContent Export(PageDataOptions options)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                Type t = typeof(StockViewDTO);
+
+                string savePath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelExport";
+                IExporter exporter = new ExcelExporter();
+                options.Page = 1;
+                options.Rows = 30;
+                options.Order = "desc";
+                options.Sort = "stockId";
+
+                ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Includes(x => x.Details);
+                ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>();
+                ISugarQueryable<Dt_StockInfoDetail> sugarQueryable2 = _dbBase.Queryable<Dt_StockInfoDetail>();
+                if (!string.IsNullOrEmpty(options.Wheres))
+                {
+                    try
+                    {
+
+                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                        if (searchParametersList?.Any() == true)
+                        {
+                            foreach (var param in searchParametersList)
+                            {
+                                switch (param.Name)
+                                {
+                                    case var name when name == nameof(Dt_StockInfo.PalletCode).FirstLetterToLower():
+                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
+                                        {
+                                            sugarQueryable1 = sugarQueryable1
+                                                .Where(x => x.PalletCode.Contains(param.Value.ToString()));
+                                        }
+                                        break;
+                                    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.Contains(param.Value.ToString()));
+                                        }
+                                        break;
+                                    case var name when name == nameof(Dt_LocationInfo.LocationStatus).FirstLetterToLower():
+                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
+                                        {
+                                            sugarQueryable = sugarQueryable
+                                                .Where(x => x.LocationStatus == param.Value.ObjToInt());
+                                        }
+                                        break;
+                                    case var name when name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower():
+                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
+                                        {
+                                            sugarQueryable1 = sugarQueryable1
+                                                .Where(x => x.StockStatus == param.Value.ObjToInt());
+                                        }
+                                        break;
+                                    case var name when name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower():
+                                        if (!string.IsNullOrEmpty(param.Value?.ToString()))
+                                        {
+                                            sugarQueryable1 = sugarQueryable1
+                                                .Where(x => x.WarehouseId == param.Value.ObjToInt());
+                                        }
+                                        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;
+                                }
+                            }
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                    }
+                }
+
 
                 ISugarQueryable<StockViewDTO> list = sugarQueryable1
                     .InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode)
@@ -152,39 +341,25 @@
                 {
                     x.MaterielCode = string.Join(",", x.Details.Select(d => d.MaterielCode).Distinct());
                     x.BatchNo = string.Join(",", x.Details.Select(d => d.BatchNo).Distinct());
+                    x.SupplierBatch = string.Join(",", x.Details.Select(d => d.SupplierBatch).Distinct());
+                    x.StockCounts = Math.Round(x.Details.Sum(x => x.StockQuantity), 3).ToString();
                     x.MaterielSpec = x.Details.FirstOrDefault()?.MaterieSpec ?? "";
                     x.MaterielName = x.Details.FirstOrDefault()?.MaterielName ?? "";
                 });
 
-                return new PageGridData<StockViewDTO>(totalCount, stockViewDTOs);
+                byte[] data = exporter.ExportAsByteArray(stockViewDTOs).Result;
+
+                string fileName = "搴撳瓨瑙嗗浘.xlsx";
+
+                FileHelper.WriteFile(savePath, fileName, data);
+
+                content = WebResponseContent.Instance.OK(data: savePath + "\\" + fileName);
             }
             catch (Exception ex)
             {
+                content = WebResponseContent.Instance.Error(ex.Message);
             }
-            return new PageGridData<StockViewDTO>();
-        }
-
-        public virtual object GetDetailPage(PageDataOptions pageData)
-        {
-            Type t = typeof(StockViewDTO);
-
-            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
-            string keyName = t.GetKeyName();
-            ////鐢熸垚鏌ヨ鏉′欢
-            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
-            int totalCount = 0;
-            PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
-            if (propertyInfo != null)
-            {
-                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
-                Navigate? navigate = propertyInfo.GetCustomAttribute<Navigate>();
-                if (navigate != null)
-                {
-                    List<ExpandoObject> list = _dbBase.Queryable(detailType.Name, "detail").Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount);
-                    return new PageGridData<ExpandoObject>(totalCount, list);
-                }
-            }
-            return new PageGridData<object>(total: 0, null);
+            return content;
         }
     }
 }

--
Gitblit v1.9.3