dengjunjie
2025-04-19 9e579eda4601ed7b492b9d19a24e8146f6ebdf8d
ÏîÄ¿´úÂë/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);