wanshenmean
2026-02-11 e6b190354191122069b1a0518f050d6504f7ec5e
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockViewService.cs
@@ -1,13 +1,10 @@
using SqlSugar;
using System.Dynamic;
using System.Reflection;
using WIDESEA_Common.LocationEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.DB.Models;
using WIDESEA_Core.Helper;
//using WIDESEA_Core.HostedService;
using WIDESEA_Core.Utilities;
using WIDESEA_DTO.Stock;
using WIDESEA_IStockService;
using WIDESEA_Model.Models;
@@ -16,38 +13,22 @@
{
    public partial class StockViewService : IStockViewService
    {
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly SqlSugarClient _dbBase;
        public StockViewService(IUnitOfWorkManage unitOfWorkManage)
        {
            _unitOfWorkManage = unitOfWorkManage;
            _dbBase = unitOfWorkManage.GetDbClient();
        }
        public virtual PageGridData<StockViewDTO> GetPageData(PageDataOptions options)
        {
            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>();
            ISugarQueryable<Dt_StockInfoDetail> sugarQueryable2 = _dbBase.Queryable<Dt_StockInfoDetail>();
            List<StockViewDTO> list = sugarQueryable1.InnerJoin(sugarQueryable, (b, a) => a.LocationCode == b.LocationCode).WhereIF(!string.IsNullOrEmpty(where), where).Select((b, a) => new StockViewDTO
            var list = _dbBase.Queryable<Dt_StockInfo>()
                .InnerJoin<Dt_LocationInfo>((b, a) => a.LocationCode == b.LocationCode)
                .WhereIF(!string.IsNullOrEmpty(where), where)
                .Select((b, a) => new StockViewDTO
            {
                LocationCode = b.LocationCode,
                Column = a.Column,
@@ -68,34 +49,35 @@
                StockId = b.Id,
                StockStatus = b.StockStatus,
                Details = b.Details,
            }).ToPageList(options.Page, options.Rows, ref totalCount);
                })
                .ToPageList(options.Page, options.Rows, ref totalCount);
            return new PageGridData<StockViewDTO>(totalCount, list);
        }
        public virtual object GetDetailPage(PageDataOptions pageData)
        {
            Type t = typeof(StockViewDTO);
            if (pageData.Value == null) return new PageGridData<object>(total: 0, null);
            string keyName = t.GetKeyName();
            ////生成查询条件
            //Expression<Func<TEntity, bool>> whereExpression = keyName.CreateExpression<TEntity>(pageData.Value, LinqExpressionType.Equal);
            int totalCount = 0;
            PropertyInfo? propertyInfo = t.GetProperties().FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
            if (propertyInfo != null)
            {
                Type detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
                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);
                }
            }
            if (pageData.Value == null)
            return new PageGridData<object>(total: 0, null);
            var propertyInfo = typeof(StockViewDTO).GetProperties()
                .FirstOrDefault(x => x.GetCustomAttribute<Navigate>() != null);
            if (propertyInfo == null)
                return new PageGridData<object>(total: 0, null);
            var detailType = propertyInfo.PropertyType.GetGenericArguments()[0];
            var navigate = propertyInfo.GetCustomAttribute<Navigate>();
            if (navigate == null)
                return new PageGridData<object>(total: 0, null);
            int totalCount = 0;
            var list = _dbBase.Queryable(detailType.Name, "detail")
                .Where(navigate.GetName(), "=", pageData.Value)
                .ToPageList(pageData.Page, pageData.Rows, ref totalCount);
            return new PageGridData<ExpandoObject>(totalCount, list);
        }
    }
}