1

NopCommerce/MVC アプリケーションのカスタム コントローラーで注文のリストを作成しようとしています。リストを creationDate で並べ替え、その日付の合計注文を含め、これらの値を文字列形式に変換したいと考えています。

問題は、管理/注文のようにビューにグリッドを表示する ActionResultが必要ないことです。「CreationDateUtc」と「TotalOrders」という 2 つのパラメーターを含む model.StartDate と model.EndDate の間のすべての支払済み注文のリストが必要です。作成日で並べ替えられた注文のデータを含むリストが必要なだけです。

StartDate 2014-03-29 と EndDate 2014-04-02 を選択すると、必要な出力は次のようになります。

パラメータ CreationDateUtc および TotalOrders を使用して OrdersTotalList をリストします。

CreationDateUtc "2014-03-29" 
TotalOrders "562"

CreationDateUtc "2014-03-30" 
TotalOrders "485"

CreationDateUtc "2014-03-31" 
TotalOrders "733"

CreationDateUtc "2014-04-01" 
TotalOrders "729"

CreationDateUtc "2014-04-02" 
TotalOrders "681

"

CustomController の OrderController から OrderList を実装してデータにアクセスしようとしています。問題は、この時間空間内の注文の総数が実際には 58 である場合に、このメソッドが常に 10 個のオブジェクトを返すことです。Total = orders.TotalCount をデバッグすると、実際には 58 個の注文が 1 つの int 値として表示されます)。また、ここでは gridmodel が使用されていますが、実際には gridmodel は必要ありません。データベースからのデータが必要なだけです。

public List OrderList(GridCommand コマンド、OrderListModel モデル、OrderModel Omodel) {

            DateTime S = new DateTime(2014, 3, 29); //-- Dates for testing
            DateTime E = new DateTime(2014, 4, 02);

            model.StartDate = S;
            model.EndDate = E;

            DateTime? startDateValue = (model.StartDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.StartDate.Value, _dateTimeHelper.CurrentTimeZone);

            DateTime? endDateValue = (model.EndDate == null) ? null
                            : (DateTime?)_dateTimeHelper.ConvertToUtcTime(model.EndDate.Value, _dateTimeHelper.CurrentTimeZone).AddDays(1);

            OrderStatus? orderStatus = model.OrderStatusId > 0 ? (OrderStatus?)(model.OrderStatusId) : null;
            PaymentStatus? paymentStatus = model.PaymentStatusId > 0 ? (PaymentStatus?)(model.PaymentStatusId) : null;
            ShippingStatus? shippingStatus = model.ShippingStatusId > 0 ? (ShippingStatus?)(model.ShippingStatusId) : null;

            //load orders
            var orders = _orderService.SearchOrders(startDateValue, endDateValue, orderStatus,
                paymentStatus, shippingStatus, model.CustomerEmail, model.OrderGuid, command.Page - 1, command.PageSize);
            var gridModel = new GridModel<OrderModel>
            {
                Data = orders.Select(x =>
                {
                    var customerCurrency = _currencyService.GetCurrencyByCode(x.CustomerCurrencyCode);
                    var totalInCustomerCurrency = _currencyService.ConvertCurrency(x.OrderTotal, x.CurrencyRate);

                    return new OrderModel()
                    {
                        Id = x.Id,
                        OrderTotal = _priceFormatter.FormatPrice(totalInCustomerCurrency, true, customerCurrency),
                        OrderStatus = x.OrderStatus.GetLocalizedEnum(_localizationService, _workContext),
                        PaymentStatus = x.PaymentStatus.GetLocalizedEnum(_localizationService, _workContext),
                        ShippingStatus = x.ShippingStatus.GetLocalizedEnum(_localizationService, _workContext),

                        CreatedOn = _dateTimeHelper.ConvertToUserTime(x.CreatedOnUtc, DateTimeKind.Utc)
                    };
                }),


                Total = orders.TotalCount <-- Returns all orders (58) but as an integer


            };



            var reportSummary = _orderReportService.GetOrderAverageReportLine
             (orderStatus, paymentStatus, shippingStatus, startDateValue, endDateValue, model.CustomerEmail);
            var profit = _orderReportService.ProfitReport
                (orderStatus, paymentStatus, shippingStatus, startDateValue, endDateValue, model.CustomerEmail);
            var aggregator = new OrderModel()
            {
                aggregatorprofit = _priceFormatter.FormatPrice(profit, true, false),
                aggregatortax = _priceFormatter.FormatPrice(reportSummary.SumTax, true, false),
                aggregatortotal = _priceFormatter.FormatPrice(reportSummary.SumOrders, true, false)
                //aggregatordates = 
            };

            List<Order> TotalProductsSold = new List<Order>();

        foreach (var o in orders)
        {

            TotalProductsSold.Add(o);


        }


            return TotalProductsSold.ToList(); //<-- returns 10 orders containing all order info
        }

これをアーカイブするために正しいことがわかった場合は、最初に注文を検索し、PaymentStatus が Paid であるかどうかを確認する必要があります。次に、上記のメソッドでリストを作成します。foreach ループは注文を反復処理してリストに注文を追加できますが、その日付の CreationDate と TotalOrders のみをリストのパラメーターとして指定する必要があります。

これが正しくないことはわかっていますが、似たようなことを想像します。問題は、1 つの値を持つ 1 つのオブジェクトではなく、注文オブジェクトのリストが必要なことです。

List<OrderModel> OrdersTotalList = new List<OrderModel>();

    foreach (var o in orders)
                {

                    OrderModel OM = new OrderModel(OM.OrderTotal, OM.CreatedOn);

                    OrdersTotalList.Add(OM);

                }

    return OrdersTotalList; //--

私は完全ですか、それともこれは正しいアプローチですか? NopCommerce に詳しい人がこれについてもっと知っていることを願っていました。

文章ばっかりでごめんなさい

ありがとうございました

4

1 に答える 1

0

解決しました。

注文の完全なリストを取得するには、IOrderService/OrderService で、IPagedList ではなく List 型の新しいコンストラクターを作成します。注文の検索に使用されるメソッドは「SearchOrders」と呼ばれ、IPagedList 型です。IPagedList にはプロパティ PageSize が含まれており、結果として 10 件しか注文されません。

SearchOrders と同じ実装で新しいメソッドを作成し、IPagedList を List に変更し、"int pageIndex" と "int pageSize" を削除できます。

次に使用します。

            _orderService.YourNewConstructor(DateTime? startTime, DateTime? endTime,
            OrderStatus? os, PaymentStatus? ps, ShippingStatus? ss, string billingEmail,
            string orderGuid)
            {
                 some code...
            }

これにより、すべての注文にアクセスできるようになります。

于 2014-04-07T10:44:29.707 に答える