From cd7253920c5e597f6a8eefe813dd039bf1a5894b Mon Sep 17 00:00:00 2001
From: pan <antony1029@163.com>
Date: 星期日, 07 十二月 2025 13:44:08 +0800
Subject: [PATCH] Merge branch 'master' of http://115.159.85.185:8098/r/ZhongRui/ALDbanyunxiangmu

---
 项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs |  156 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 154 insertions(+), 2 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
index 15e4b18..ea36886 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS\346\227\240\344\273\223\345\202\250\347\211\210/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs"
@@ -1,12 +1,164 @@
-锘縰sing System;
+锘縰sing SqlSugar;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
 
 namespace WIDESEA_StockService
 {
-    internal class StockDetailByMaterielService
+    public class StockDetailByMaterielService :IStockDetailByMaterielService
     {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+        private readonly SqlSugarClient _dbBase;
+
+        public StockDetailByMaterielService(IUnitOfWorkManage unitOfWorkManage)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+            _dbBase = unitOfWorkManage.GetDbClient();
+        }
+
+
+        public virtual PageGridData<StockDetailByMateriel> GetPageGridData(PageDataOptions options)
+        {
+            try
+            {
+
+                List<StockDetailByMateriel> materielnfoStatistics = new List<StockDetailByMateriel>();
+                ISugarQueryable<Dt_StockInfoDetail> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfoDetail>();
+
+                ISugarQueryable<Dt_StockInfo> sugarQueryable = _dbBase.Queryable<Dt_StockInfo>();
+                if (!string.IsNullOrEmpty(options.Wheres))
+                {
+                    try
+                    {
+                        List<SearchParameters> searchParametersList = options.Wheres.DeserializeObject<List<SearchParameters>>();
+                        if (searchParametersList.Count > 0)
+                        {
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielCode.Contains(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.WarehouseId).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable = sugarQueryable.Where(x => x.WarehouseId.Equals(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfo.StockStatus).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable = sugarQueryable.Where(x => x.StockStatus.Equals(searchParameters.Value));
+                                }
+                            }
+                            {
+                                SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower());
+                                if (searchParameters != null)
+                                {
+                                    sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value));
+                                }
+                            }
+
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+
+                    }
+                }
+
+
+                ISugarQueryable<StockDetailByMateriel> sugarQueryable2 = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => b.StockId == a.Id).Where((b, a) => a.LocationCode != "" && a.LocationCode != null).Select((b, a)
+                    => new StockDetailByMateriel
+                    {
+                       StockId = b.StockId,
+                        MaterielCode = b.MaterielCode,
+                        MaterielName = b.MaterielName,
+                        StockQuantity = (decimal)b.StockQuantity,
+                        OutboundQuantity = (decimal)b.OutboundQuantity,
+                        OrderNo = b.OrderNo,
+                        BatchNo = b.BatchNo,
+                        SerialNumber = b.SerialNumber,
+                        SupplyCode = b.SupplyCode,
+                        WarehouseCode = b.WarehouseCode,
+                        Barcode = b.Barcode,
+                        Unit = b.Unit,
+                        Creater = b.Creater,
+                        CreateDate= b.CreateDate,
+                        Modifier = b.Modifier,
+                        ModifyDate = b.ModifyDate,
+                        Remark = a.Remark,
+
+                    });
+                // 鑾峰彇鎵�鏈夋暟鎹�
+                var allData = sugarQueryable2.ToList();
+
+                // 浣跨敤瀛楀吀杩涜鍒嗙粍姹囨��
+                var groupedData = new Dictionary<string, StockDetailByMateriel>();
+                foreach (var item in allData)
+                {
+                    // 纭繚鍒濆鍊间负decimal绫诲瀷
+                    if (groupedData.ContainsKey(item.MaterielCode))
+                    {
+                        groupedData[item.MaterielCode].StockQuantity += Convert.ToDecimal(item.StockQuantity);
+                        groupedData[item.MaterielCode].OutboundQuantity += Convert.ToDecimal(item.OutboundQuantity);
+                    }
+                    else
+                    {
+                        groupedData[item.MaterielCode] = new StockDetailByMateriel
+                        {
+                            StockId = item.StockId,
+                            MaterielCode = item.MaterielCode,
+                            MaterielName = item.MaterielName,
+                            StockQuantity = Convert.ToDecimal(item.StockQuantity),
+                            OutboundQuantity = Convert.ToDecimal(item.OutboundQuantity),
+                            OrderNo = item.OrderNo,
+                            BatchNo = item.BatchNo,
+                            SerialNumber = item.SerialNumber,
+                            SupplyCode = item.SupplyCode,
+                            WarehouseCode = item.WarehouseCode,
+                            Barcode = item.Barcode,
+                            Creater = item.Creater,
+                            CreateDate = item.CreateDate,
+                            Modifier = item.Modifier,
+                            ModifyDate = item.ModifyDate,
+                            Unit = item.Unit,
+                            Remark = item.Remark
+                        };
+                    }
+                }
+
+                // 杞崲涓哄垪琛�
+                materielnfoStatistics = groupedData.Values.ToList();
+
+                // 鍒嗛〉澶勭悊
+                int startIndex = (options.Page - 1) * options.Rows;
+                int endIndex = Math.Min(startIndex + options.Rows, materielnfoStatistics.Count);
+                materielnfoStatistics = materielnfoStatistics.GetRange(startIndex, endIndex - startIndex);
+
+                int count = groupedData.Count;
+
+                return new PageGridData<StockDetailByMateriel>(count, materielnfoStatistics);
+
+            }
+            catch (Exception ex)
+            {
+
+            }
+            return new PageGridData<StockDetailByMateriel>();
+        }
     }
 }

--
Gitblit v1.9.3