From 95c92db3c831c73b05068b09221c13ad4a250322 Mon Sep 17 00:00:00 2001
From: 647556386 <647556386@qq.com>
Date: 星期一, 02 二月 2026 20:07:00 +0800
Subject: [PATCH] 条码扫描成功音频播放功能,代码优化
---
项目代码/WMS无仓储版/WIDESEA_WMSServer/WIDESEA_StockService/StockDetailByMaterielService.cs | 163 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 161 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..7ca9282 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,171 @@
-锘縰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>();
+ ISugarQueryable<Dt_MaterielInfo> sugarQueryable3 = _dbBase.Queryable<Dt_MaterielInfo>();
+
+ 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 = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.WarehouseCode).FirstLetterToLower());
+ if (searchParameters != null)
+ {
+ sugarQueryable1 = sugarQueryable1.Where(x => x.WarehouseCode.Contains(searchParameters.Value));
+ }
+
+ searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielName).FirstLetterToLower());
+ if (searchParameters != null)
+ {
+
+ sugarQueryable1 = sugarQueryable1.Where(x => x.MaterielName.Contains(searchParameters.Value));
+ }
+
+ searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.BatchNo).FirstLetterToLower());
+ if (searchParameters != null)
+ {
+ sugarQueryable1 = sugarQueryable1.Where(x => x.BatchNo.Contains(searchParameters.Value));
+ }
+
+ searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.SupplyCode).FirstLetterToLower());
+ if (searchParameters != null)
+ {
+ sugarQueryable1 = sugarQueryable1.Where(x => x.SupplyCode.Contains(searchParameters.Value));
+ }
+
+ }
+ }
+ catch (Exception ex)
+ {
+
+ }
+ }
+
+ ISugarQueryable<StockDetailByMateriel> sugarQueryable2 = sugarQueryable1
+ .InnerJoin(sugarQueryable, (detail, stock) => detail.StockId == stock.Id)
+ .LeftJoin(sugarQueryable3, (detail, stock, materiel) => detail.MaterielCode == materiel.MaterielCode)
+ .Where((detail, stock, materiel) => !string.IsNullOrEmpty(stock.LocationCode))
+ .Select((detail, stock, materiel) => new StockDetailByMateriel
+ {
+ StockId = detail.StockId,
+ MaterielCode = detail.MaterielCode,
+ MaterielName = materiel.MaterielName ==null ?detail.MaterielName:materiel.MaterielName,
+ StockQuantity = (decimal)detail.StockQuantity,
+ OutboundQuantity = (decimal)detail.OutboundQuantity,
+ OrderNo = detail.OrderNo,
+ BatchNo = detail.BatchNo,
+ SerialNumber = detail.SerialNumber,
+ SupplyCode = detail.SupplyCode,
+ WarehouseCode = detail.WarehouseCode,
+ Barcode = detail.Barcode,
+ Unit = detail.Unit,
+ Creater = detail.Creater,
+ CreateDate = detail.CreateDate,
+ Modifier = detail.Modifier,
+ ModifyDate = detail.ModifyDate,
+ Remark = stock.Remark
+ });
+
+
+ var allData = sugarQueryable2.ToList();
+
+
+ var groupedData = new Dictionary<string, StockDetailByMateriel>();
+ foreach (var item in allData)
+ {
+ string groupKey = $"{item.MaterielCode}|{item.SupplyCode}|{item.BatchNo}|{item.WarehouseCode}";
+
+ if (groupedData.ContainsKey(groupKey))
+ {
+ groupedData[groupKey].StockQuantity += Convert.ToDecimal(item.StockQuantity);
+ groupedData[groupKey].OutboundQuantity += Convert.ToDecimal(item.OutboundQuantity);
+ }
+ else
+ {
+ groupedData[groupKey] = 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);
+ if (startIndex < materielnfoStatistics.Count)
+ {
+ materielnfoStatistics = materielnfoStatistics.GetRange(startIndex, endIndex - startIndex);
+ }
+ else
+ {
+ materielnfoStatistics = new List<StockDetailByMateriel>();
+ }
+
+ int count = groupedData.Count;
+ return new PageGridData<StockDetailByMateriel>(count, materielnfoStatistics);
+ }
+ catch (Exception ex)
+ {
+ return new PageGridData<StockDetailByMateriel>();
+ }
+ }
}
}
--
Gitblit v1.9.3