コード例 #1
0
        public PagedList <CustomerOrderInfoExt> GetCustomerOrderInfoList(CustomerOrderParam param, int maxCustomerOrderId = 0)
        {
            var ctx = this.UnitOfWork as LMS_DbContext;

            Check.Argument.IsNotNull(ctx, "数据库对象");
            IQueryable <CustomerOrderInfoExt> list;
            int deleteSatus = CustomerOrder.StatusEnum.Delete.GetStatusValue();
            Expression <Func <CustomerOrderInfo, bool> > filter        = o => true;
            Expression <Func <WayBillInfo, bool> >       filterWayBill = o => true;

            filter = filter.AndIf(o => o.IsHold == param.IsHold.Value, param.IsHold.HasValue)
                     .AndIf(o => o.CustomerCode == param.CustomerCode, !param.CustomerCode.IsNullOrWhiteSpace())
                     .AndIf(o => o.Status == param.Status.Value, param.Status.HasValue)
                     .AndIf(o => o.Status != deleteSatus, !param.Status.HasValue)
                     .AndIf(o => o.CustomerOrderID <= maxCustomerOrderId, maxCustomerOrderId > 0)
            ;
            //Expression<Func<InStorageInfo, bool>> filterInStorage = o => true;
            //Expression<Func<OutStorageInfo, bool>> filterOutStorage = o => true;
            //Func<IQueryable<WayBillInfo>, IOrderedQueryable<WayBillInfo>> orderFunc;
            if (!string.IsNullOrWhiteSpace(param.SearchContext))
            {
                var numberList =
                    param.SearchContext.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                    .ToList();
                if (param.SearchWhere.HasValue && numberList.Count > 0)
                {
                    switch (WayBill.ParseToSearchFilter(param.SearchWhere.Value))
                    {
                    case WayBill.SearchFilterEnum.WayBillNumber:
                        filterWayBill = filterWayBill.And(p => numberList.Contains(p.WayBillNumber));
                        break;

                    case WayBill.SearchFilterEnum.TrackingNumber:
                        filter = filter.And(p => numberList.Contains(p.TrackingNumber));
                        break;

                    case WayBill.SearchFilterEnum.CustomerOrderNumber:
                        filter = filter.And(p => numberList.Contains(p.CustomerOrderNumber));
                        break;
                    }
                }
            }
            else if (!param.CustomerOrderNumber.IsNullOrWhiteSpace())
            {
                var numberList =
                    param.CustomerOrderNumber.Split(Environment.NewLine.ToCharArray(),
                                                    StringSplitOptions.RemoveEmptyEntries)
                    .ToList();

                if (numberList.Count > 0)
                {
                    string number = numberList[0];
                    filter = numberList.Count == 1
                                 ? filter.And(o => o.CustomerOrderNumber == number)
                                 : filter.And(o => numberList.Contains(o.CustomerOrderNumber));
                }
            }

            if (param.IsReceived)
            {
                filterWayBill = filterWayBill
                                .AndIf(o => o.InStorageCreatedOn >= param.CreatedOnFrom.Value, param.CreatedOnFrom.HasValue)
                                .AndIf(o => o.InStorageCreatedOn <= param.CreatedOnTo.Value, param.CreatedOnTo.HasValue);
            }
            else if (param.IsDeliver)
            {
                filterWayBill = filterWayBill
                                .AndIf(o => o.OutStorageCreatedOn >= param.CreatedOnFrom.Value, param.CreatedOnFrom.HasValue)
                                .AndIf(o => o.OutStorageCreatedOn <= param.CreatedOnTo.Value, param.CreatedOnTo.HasValue);
            }
            else
            {
                filter = filter
                         .AndIf(o => o.CreatedOn >= param.CreatedOnFrom.Value, param.CreatedOnFrom.HasValue)
                         .AndIf(o => o.CreatedOn <= param.CreatedOnTo.Value, param.CreatedOnTo.HasValue);
            }

            filter = filter
                     .AndIf(o => o.ShippingMethodId == param.ShippingMethodId.Value, param.ShippingMethodId.HasValue)
                     .AndIf(o => o.ShippingInfo.CountryCode == param.CountryCode, !param.CountryCode.IsNullOrWhiteSpace())
                     .AndIf(o => o.IsPrinted == param.IsPrinted.Value, param.IsPrinted.HasValue);
            //}



            if (param.SearchWhere.HasValue && !string.IsNullOrWhiteSpace(param.SearchContext))
            {
                if (param.IsDeliver)
                {
                    list = from w in ctx.WayBillInfos.Where(filterWayBill)
                           join o in ctx.CustomerOrderInfos.Where(filter) on w.CustomerOrderID equals o.CustomerOrderID
                           orderby w.OutStorageCreatedOn descending
                           select new CustomerOrderInfoExt
                    {
                        CustomerCode        = o.CustomerCode,
                        CustomerOrderID     = o.CustomerOrderID,
                        CustomerOrderNumber = o.CustomerOrderNumber,
                        WayBillNumber       = w.WayBillNumber,
                        Status             = o.Status,
                        TrackingNumber     = o.TrackingNumber,
                        RawTrackingNumber  = w.RawTrackingNumber,
                        CountryCode        = w.CountryCode,
                        Weight             = w.Weight ?? 0,
                        SettleWeight       = w.SettleWeight,
                        Width              = w.Width ?? 0,
                        Height             = w.Height ?? 0,
                        Length             = w.Length ?? 0,
                        ShippingMethodId   = w.InShippingMethodID,
                        ShippingMethodName = w.InShippingMethodName,
                        CreatedOn          = w.OutStorageCreatedOn ?? DateTime.Now,
                        TransferOrderDate  = w.TransferOrderDate,
                    };
                }
                else if (param.IsReceived)
                {
                    list = from w in ctx.WayBillInfos.Where(filterWayBill)
                           //join i in ctx.InStorageInfos.Where(filterInStorage) on w.InStorageID equals i.InStorageID
                           join o in ctx.CustomerOrderInfos.Where(filter) on w.CustomerOrderID equals o.CustomerOrderID
                           orderby w.InStorageCreatedOn descending
                           select new CustomerOrderInfoExt
                    {
                        CustomerCode        = o.CustomerCode,
                        CustomerOrderID     = o.CustomerOrderID,
                        CustomerOrderNumber = o.CustomerOrderNumber,
                        WayBillNumber       = w.WayBillNumber,
                        Status             = o.Status,
                        TrackingNumber     = o.TrackingNumber,
                        RawTrackingNumber  = w.RawTrackingNumber,
                        CountryCode        = w.CountryCode,
                        Weight             = w.Weight ?? 0,
                        SettleWeight       = w.SettleWeight,
                        Width              = w.Width ?? 0,
                        Height             = w.Height ?? 0,
                        Length             = w.Length ?? 0,
                        ShippingMethodId   = w.InShippingMethodID,
                        ShippingMethodName = w.InShippingMethodName,
                        CreatedOn          = w.InStorageCreatedOn ?? DateTime.Now,
                        TransferOrderDate  = w.TransferOrderDate,
                    };
                }
                else
                {
                    list = from w in ctx.WayBillInfos.Where(filterWayBill)
                           join o in ctx.CustomerOrderInfos.Where(filter) on w.CustomerOrderID equals o.CustomerOrderID
                           orderby o.CreatedOn descending
                           select new CustomerOrderInfoExt
                    {
                        CustomerCode        = o.CustomerCode,
                        CustomerOrderID     = o.CustomerOrderID,
                        CustomerOrderNumber = o.CustomerOrderNumber,
                        WayBillNumber       = w.WayBillNumber,
                        Status             = o.Status,
                        TrackingNumber     = o.TrackingNumber,
                        RawTrackingNumber  = w.RawTrackingNumber,
                        CountryCode        = w.CountryCode,
                        Weight             = w.Weight ?? 0,
                        SettleWeight       = w.SettleWeight,
                        Width              = w.Width ?? 0,
                        Height             = w.Height ?? 0,
                        Length             = w.Length ?? 0,
                        ShippingMethodId   = w.InShippingMethodID,
                        ShippingMethodName = w.InShippingMethodName,
                        CreatedOn          = o.CreatedOn,
                        TransferOrderDate  = w.TransferOrderDate,
                        Remark             = o.Remark,
                    };
                }
            }
            else
            {
                //if (param.IsDeliver)
                //{
                //    list = from o in ctx.CustomerOrderInfos.Where(filter)
                //           join w in ctx.WayBillInfos.Where(filterWayBill) on o.CustomerOrderID equals w.CustomerOrderID
                //           into Grp
                //           from grp in Grp.DefaultIfEmpty()
                //           orderby grp.TransferOrderDate descending, grp.CreatedOn descending
                //           select new CustomerOrderInfoExt
                //           {
                //               CustomerCode = o.CustomerCode,
                //               CustomerOrderID = o.CustomerOrderID,
                //               CustomerOrderNumber = o.CustomerOrderNumber,
                //               WayBillNumber = grp.WayBillNumber,
                //               Status = o.Status,
                //               TrackingNumber = o.TrackingNumber,
                //               RawTrackingNumber = grp.RawTrackingNumber,
                //               CountryCode = o.ShippingInfo.CountryCode,
                //               Weight = grp.Weight ?? 0,
                //               SettleWeight = grp.SettleWeight,
                //               Width = grp.Width ?? 0,
                //               Height = grp.Height ?? 0,
                //               Length = grp.Length ?? 0,
                //               ShippingMethodId = o.ShippingMethodId,
                //               ShippingMethodName = o.ShippingMethodName,
                //               CreatedOn = grp.CreatedOn,
                //               TransferOrderDate = grp.TransferOrderDate,
                //           };
                //}else if (param.IsReceived)
                //{
                //    list = from o in ctx.CustomerOrderInfos.Where(filter)
                //           join w in ctx.WayBillInfos.Where(filterWayBill) on o.CustomerOrderID equals w.CustomerOrderID
                //           join i in ctx.InStorageInfos.Where(filterInStorage) on w.InStorageID equals i.InStorageID into Grp
                //           from grp in Grp.DefaultIfEmpty()
                //           orderby w.TransferOrderDate descending, grp.CreatedOn descending
                //           select new CustomerOrderInfoExt
                //           {
                //               CustomerCode = o.CustomerCode,
                //               CustomerOrderID = o.CustomerOrderID,
                //               CustomerOrderNumber = o.CustomerOrderNumber,
                //               WayBillNumber = w.WayBillNumber,
                //               Status = o.Status,
                //               TrackingNumber = o.TrackingNumber,
                //               RawTrackingNumber = w.RawTrackingNumber,
                //               CountryCode = o.ShippingInfo.CountryCode,
                //               Weight = w.Weight ?? 0,
                //               SettleWeight = w.SettleWeight,
                //               Width = w.Width ?? 0,
                //               Height = w.Height ?? 0,
                //               Length = w.Length ?? 0,
                //               ShippingMethodId = o.ShippingMethodId,
                //               ShippingMethodName = o.ShippingMethodName,
                //               CreatedOn = grp.CreatedOn,
                //               TransferOrderDate = w.TransferOrderDate,
                //           };
                //}
                //else
                //{
                if (param.Status.HasValue)
                {
                    switch (CustomerOrder.ParseToStatus(param.Status.Value))
                    {
                    case CustomerOrder.StatusEnum.None:
                    case CustomerOrder.StatusEnum.OK:
                    case CustomerOrder.StatusEnum.SubmitFail:
                        list = from o in ctx.CustomerOrderInfos.Where(filter)
                               orderby o.CreatedOn descending
                               select new CustomerOrderInfoExt
                        {
                            CustomerCode        = o.CustomerCode,
                            CustomerOrderID     = o.CustomerOrderID,
                            CustomerOrderNumber = o.CustomerOrderNumber,
                            WayBillNumber       = "",
                            Status             = o.Status,
                            TrackingNumber     = o.TrackingNumber,
                            RawTrackingNumber  = "",
                            CountryCode        = "",
                            Weight             = o.Weight,
                            SettleWeight       = 0,
                            Width              = o.Width,
                            Height             = o.Height,
                            Length             = o.Length,
                            ShippingMethodId   = o.ShippingMethodId,
                            ShippingMethodName = o.ShippingMethodName,
                            CreatedOn          = o.CreatedOn,
                            TransferOrderDate  = null,
                            Remark             = o.Remark,
                        };
                        break;

                    default:
                        list = from o in ctx.CustomerOrderInfos.Where(filter)
                               join w in ctx.WayBillInfos.Where(filterWayBill) on o.CustomerOrderID equals w.CustomerOrderID
                               into Grp
                               from grp in Grp.DefaultIfEmpty()
                               orderby grp.TransferOrderDate descending, o.CreatedOn descending, grp.WayBillNumber descending
                        select new CustomerOrderInfoExt
                        {
                            CustomerCode        = o.CustomerCode,
                            CustomerOrderID     = o.CustomerOrderID,
                            CustomerOrderNumber = o.CustomerOrderNumber,
                            WayBillNumber       = grp.WayBillNumber,
                            Status             = o.Status,
                            TrackingNumber     = o.TrackingNumber,
                            RawTrackingNumber  = grp.RawTrackingNumber,
                            CountryCode        = grp.CountryCode,
                            Weight             = grp.Weight ?? 0,
                            SettleWeight       = grp.SettleWeight,
                            Width              = grp.Width ?? 0,
                            Height             = grp.Height ?? 0,
                            Length             = grp.Length ?? 0,
                            ShippingMethodId   = o.ShippingMethodId,
                            ShippingMethodName = o.ShippingMethodName,
                            CreatedOn          = o.CreatedOn,
                            TransferOrderDate  = grp.TransferOrderDate,
                            Remark             = o.Remark,
                        };
                        break;
                    }
                }
                else
                {
                    list = from o in ctx.CustomerOrderInfos.Where(filter)
                           join w in ctx.WayBillInfos.Where(filterWayBill) on o.CustomerOrderID equals w.CustomerOrderID
                           into Grp
                           from grp in Grp.DefaultIfEmpty()
                           orderby grp.TransferOrderDate descending, o.CreatedOn descending, grp.WayBillNumber descending
                    select new CustomerOrderInfoExt
                    {
                        CustomerCode        = o.CustomerCode,
                        CustomerOrderID     = o.CustomerOrderID,
                        CustomerOrderNumber = o.CustomerOrderNumber,
                        WayBillNumber       = grp.WayBillNumber,
                        Status             = o.Status,
                        TrackingNumber     = o.TrackingNumber,
                        RawTrackingNumber  = grp.RawTrackingNumber,
                        CountryCode        = grp.CountryCode,
                        Weight             = grp.Weight ?? 0,
                        SettleWeight       = grp.SettleWeight,
                        Width              = grp.Width ?? 0,
                        Height             = grp.Height ?? 0,
                        Length             = grp.Length ?? 0,
                        ShippingMethodId   = o.ShippingMethodId,
                        ShippingMethodName = o.ShippingMethodName,
                        CreatedOn          = o.CreatedOn,
                        TransferOrderDate  = grp.TransferOrderDate,
                        Remark             = o.Remark,
                    };
                }
                //}
            }

            return(list.ToPagedList(param.Page, param.PageSize));
        }