From cb25acc46bf41863e068b6f968f1592b7a14d1c9 Mon Sep 17 00:00:00 2001 From: helongyang <647556386@qq.com> Date: 星期六, 13 九月 2025 08:12:14 +0800 Subject: [PATCH] 功能更新优化 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs | 260 ++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 190 insertions(+), 70 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 29b525d..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,51 +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; } } - - { - 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); + 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, @@ -112,50 +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) { @@ -173,8 +227,22 @@ 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); + List<Dt_StockInfoDetail> list = _dbBase.Queryable<Dt_StockInfoDetail>().Where(navigate.GetName(), "=", pageData.Value).ToPageList(pageData.Page, pageData.Rows, ref totalCount); + decimal sum = 0; + list.ForEach(x => + { + sum += Convert.ToDecimal(x.StockQuantity); + }); + PageGridData<Dt_StockInfoDetail> pageGridData = new PageGridData<Dt_StockInfoDetail>() + { + Total = totalCount, + Rows = list, + Summary = new + { + StockQuantity = Math.Round(sum, 3), + } + }; + return pageGridData; } } return new PageGridData<object>(total: 0, null); @@ -201,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); @@ -238,6 +354,7 @@ { LocationCode = b.LocationCode, Column = a.Column, + Expirationlabel = b.Expirationlabel, WarehouseId = b.WarehouseId, CreateDate = b.CreateDate, Creater = b.Creater, @@ -263,6 +380,7 @@ LocationCode = b.LocationCode, Column = 0, WarehouseId = b.WarehouseId, + Expirationlabel = b.Expirationlabel, CreateDate = b.CreateDate, Creater = b.Creater, Depth = 0, @@ -287,7 +405,9 @@ { x.MaterielCode = (string.Join(",", x.Details.Select(x => x.MaterielCode).Distinct())) ?? "绌虹"; x.BatchNo = (string.Join(",", x.Details.Select(x => x.BatchNo).Distinct())) ?? "鏃�"; - x.StockCounts = x.Details.Sum(x => x.StockQuantity).ToString() + x.Details.FirstOrDefault()?.Unit; + x.StockCounts = Math.Round(x.Details.Sum(x => x.StockQuantity),3).ToString() + x.Details.FirstOrDefault()?.Unit; + x.MaterielSpec= x.Details.FirstOrDefault()?.MaterielSpec ?? ""; + x.MaterielName= x.Details.FirstOrDefault()?.MaterielName ?? ""; } ); -- Gitblit v1.9.3