From 9e579eda4601ed7b492b9d19a24e8146f6ebdf8d Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期六, 19 四月 2025 19:50:43 +0800 Subject: [PATCH] 优化空托出入库逻辑 --- 项目代码/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs | 300 ++++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 190 insertions(+), 110 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs" index dc8ce5c..a248f3c 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WIDESEA_WMSServer/WIDESEA_StockService/Base/StockViewService.cs" @@ -1,4 +1,5 @@ 锘� +using MailKit.Search; using Microsoft.AspNetCore.Http; using SqlSugar; using System; @@ -9,6 +10,7 @@ using System.Reflection; using System.Text; using System.Threading.Tasks; +using WIDESEA_Common; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; @@ -16,6 +18,7 @@ using WIDESEA_Core.Helper; using WIDESEA_Core.Utilities; using WIDESEA_DTO.Stock; +using WIDESEA_IBasicRepository; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_Model.Models; @@ -25,144 +28,221 @@ public partial class StockViewService : IStockViewService { private readonly IUnitOfWorkManage _unitOfWorkManage; + private readonly IStockRepository _stockRepository; private readonly SqlSugarClient _dbBase; - public StockViewService(IUnitOfWorkManage unitOfWorkManage) + public StockViewService(IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository) { _unitOfWorkManage = unitOfWorkManage; _dbBase = unitOfWorkManage.GetDbClient(); + _stockRepository = stockRepository; } public virtual PageGridData<StockViewDTO> GetPageData(PageDataOptions options) { #region MyRegion - //try - //{ - // List<StockViewDTO> stockViewDTOs = new List<StockViewDTO>(); + 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) - // { - // { - // SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower()); - // if (searchParameters != null) - // { - // sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value))); - // } - // } + 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) + { + { + SearchParameters? searchParameters = searchParametersList.FirstOrDefault(x => x.Name == nameof(Dt_StockInfoDetail.MaterielCode).FirstLetterToLower()); + if (searchParameters != null) + { + sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.MaterielCode.Contains(searchParameters.Value))); + } + } - // { - // 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_StockInfoDetail.BatchNo).FirstLetterToLower()); + if (searchParameters != null) + { + sugarQueryable1 = sugarQueryable1.Where(x => x.Details.Any(v => v.BatchNo.Contains(searchParameters.Value))); + } + } - // } + } - // } - // catch { } - // } - // //string whereSto = GetDataRole(typeof(Dt_StockInfo)); - // //sugarQueryable1 = sugarQueryable1.Where(whereSto); - // EntityProperties.ValidatePageOptions(options, ref sugarQueryable1); + } + catch { } + } + //string whereSto = GetDataRole(typeof(Dt_StockInfo)); + sugarQueryable1 = sugarQueryable1.Where("1 = 1"); + EntityProperties.ValidatePageOptions(options, ref sugarQueryable1); - // //string whereLo = GetDataRole(typeof(Dt_LocationInfo)); - // //ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>().Where(whereLo); + //string whereLo = GetDataRole(typeof(Dt_LocationInfo)); + ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>().Where("1 = 1"); - // //EntityProperties.ValidatePageOptions(options, ref sugarQueryable); + EntityProperties.ValidatePageOptions(options, ref sugarQueryable); - // ISugarQueryable<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a) - // => new StockViewDTO - // { - // LocationCode = b.LocationCode, - // Column = a.Column, - // 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, - // Row = a.Row, - // StockId = b.Id, - // StockStatus = b.StockStatus, - // Details = b.Details, - // }); + ISugarQueryable<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).Select((b, a) + => new StockViewDTO + { + LocationCode = b.LocationCode, + Column = a.Column, + 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, + Row = a.Row, + StockId = b.Id, + StockStatus = b.StockStatus, + Details = b.Details, + }); - // int totalCount = 0; + int totalCount = 0; - // stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount); - // return new PageGridData<StockViewDTO>(totalCount, stockViewDTOs); - //} - //catch (Exception ex) - //{ - // return new PageGridData<StockViewDTO>(); - //} + stockViewDTOs = list.ToPageList(options.Page, options.Rows, ref totalCount); + return new PageGridData<StockViewDTO>(totalCount, stockViewDTOs); + } + catch (Exception ex) + { + return new PageGridData<StockViewDTO>(); + } #endregion #region MyRegion - string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties()); - //鑾峰彇鎺掑簭瀛楁 - //Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(typeof(StockViewDTO).GetProperties()); - //List<OrderByModel> orderByModels = new List<OrderByModel>(); - //foreach (var item in orderbyDic) + //string where = options.ValidatePageOptions(typeof(StockViewDTO).GetProperties()); + ////鑾峰彇鎺掑簭瀛楁 + ////Dictionary<string, OrderByType> orderbyDic = options.GetPageDataSort(typeof(StockViewDTO).GetProperties()); + ////List<OrderByModel> orderByModels = new List<OrderByModel>(); + ////foreach (var item in orderbyDic) + ////{ + //// OrderByModel orderByModel = new OrderByModel() + //// { + //// FieldName = item.Key, + //// OrderByType = item.Value + //// }; + //// orderByModels.Add(orderByModel); + ////} + //int totalCount = 0; + + //ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>(); + //ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>(); + + //List<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO //{ - // OrderByModel orderByModel = new OrderByModel() - // { - // FieldName = item.Key, - // OrderByType = item.Value - // }; - // orderByModels.Add(orderByModel); - //} - int totalCount = 0; - - ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>(); - ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>(); - - List<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO - { - AreaId = a.AreaId, - LocationCode = b.LocationCode, - Column = a.Column, - CreateDate = b.CreateDate, - Creater = b.Creater, - Depth = a.Depth, - EnalbeStatus = a.EnableStatus, - IsFull = b.IsFull, - 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, - Row = a.Row, - StockId = b.Id, - StockStatus = b.StockStatus, - Details = b.Details, - }).ToPageList(options.Page, options.Rows, ref totalCount); - return new PageGridData<StockViewDTO>(totalCount, list); + // AreaId = a.AreaId, + // LocationCode = b.LocationCode, + // Column = a.Column, + // CreateDate = b.CreateDate, + // Creater = b.Creater, + // Depth = a.Depth, + // EnalbeStatus = a.EnableStatus, + // IsFull = b.IsFull, + // 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, + // Row = a.Row, + // StockId = b.Id, + // StockStatus = b.StockStatus, + // Details = b.Details, + //}).ToPageList(options.Page, options.Rows, ref totalCount); + //return new PageGridData<StockViewDTO>(totalCount, list); #endregion } + public virtual WebResponseContent GetLocationStockView(int Layer) + { + WebResponseContent content = new WebResponseContent(); + try + { + List<LocationStockView> locationStockViews = new List<LocationStockView>(); + ISugarQueryable<Dt_LocationInfo> sugarQueryable = _dbBase.Queryable<Dt_LocationInfo>(); + List<Dt_LocationInfo> dt_LocationInfos = sugarQueryable.ToList(); + + ISugarQueryable<Dt_StockInfo> sugarQueryable1 = _dbBase.Queryable<Dt_StockInfo>().Where(x => dt_LocationInfos.Select(x => x.LocationCode).ToList().Contains(x.LocationCode)).Includes(x => x.Details); + List<Dt_StockInfo> StockInfos = sugarQueryable1.OrderBy(x => x.InDate).ToList(); + foreach (var dt_LocationInfo in dt_LocationInfos) + { + LocationStockView locationStockView = new LocationStockView() + { + AreaId = dt_LocationInfo.AreaId, + Column = dt_LocationInfo.Column, + Depth = dt_LocationInfo.Depth, + EnalbeStatus = dt_LocationInfo.EnableStatus, + Layer = dt_LocationInfo.Layer, + LocationCode = dt_LocationInfo.LocationCode, + LocationName = dt_LocationInfo.LocationName, + LocationStatus = dt_LocationInfo.LocationStatus, + LocationType = dt_LocationInfo.LocationType, + RoadwayNo = dt_LocationInfo.RoadwayNo, + Row = dt_LocationInfo.Row + }; + List<Dt_StockInfo> dt_StockInfos = StockInfos.Where(x => x.LocationCode == dt_LocationInfo.LocationCode).ToList(); + if (dt_StockInfos.Count > 0 && dt_StockInfos != null) + { + locationStockView.BatchNo = dt_StockInfos.First().Details.First().BatchNo; + locationStockView.InDate = dt_StockInfos.First().InDate; + locationStockView.MaterielCode = dt_StockInfos.First().Details.First().MaterielCode; + locationStockView.MaterielName = dt_StockInfos.First().Details.First().MaterielName; + locationStockView.OrderNo = dt_StockInfos.First().Details.First().OrderNo; + locationStockView.PalletCode = string.Join(",", dt_StockInfos.Select(x => x.PalletCode).ToList()); + locationStockView.Quantity = dt_StockInfos.Count; + } + locationStockViews.Add(locationStockView); + } + if (locationStockViews.Count > 0) + { + #region MyRegion + List<LocationLayer> layers = new List<LocationLayer>(); + foreach (var layer in locationStockViews.GroupBy(x => x.Layer)) + { + var rows = new List<LocationRow>(); + var data_rows = layer.GroupBy(t => t.Row); + foreach (var data_row in data_rows) + { + rows.Add(new LocationRow() + { + index = data_row.Key, + cols = data_row.OrderBy(x => x.Column).ToList() + }); + } + //rows=rows.OrderBy(x=>x.index).ToList(); + layers.Add(new LocationLayer() + { + index = layer.Key, + rows = rows + }); + } + #endregion + layers = layers.OrderBy(x => x.index).ToList(); + content.OK(data: layers); + } + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + public virtual object GetDetailPage(PageDataOptions pageData) { Type t = typeof(StockViewDTO); -- Gitblit v1.9.3