バージョン選択

フォーラム

メニュー

オンライン状況

40 人のユーザが現在オンラインです。 (31 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 39
gordon974 もっと...

サイト内検索

バグ報告 > 管理機能 > 受注情報を更新すると購入回数と購入金額が初回購入時のものにリセットされる

管理機能

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/6/8 10:03
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
Re: 受注情報を更新すると購入回数と購入金額が初回購入時のものにリセットされる
本件、EC-CUBE3.0.15にて改修されていることを確認しました。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/6/8 9:23
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1610
受注情報を更新すると購入回数と購入金額が初回購入時のものにリセットされる
EC-CUBE3.0.14

管理画面の受注マスターから受注情報を更新すると、購入回数と購入金額を更新する処理が走るのですが、情報を取得するSQLがおかしいと思われます。

たとえば次のように3回の購入があった場合、購入回数は3、購入金額は6000となるはずですが、購入回数は1、購入金額は1000となってしまいます。

order_id  total
注文ID  購入金額
 101   1000
 102   2000
 103   3000

発行されるSQLをdumpしてみたところ、次のようになっていました。

SELECT
 COUNT(o.order_id) AS buy_times,
 SUM(o.total) AS buy_total
FROM
 dtb_order o
WHERE
 o.customer_id = xxxx -- 会員ID
AND o.status in(1,2,4,5,6)
GROUP BY
 o.order_id
ORDER BY
 o.order_id ASC

SQLの実行結果は次のとおりです。

■想定している結果
buy_times buy_total
  3    6000

■実際の結果
buy_times buy_total
  1    1000
  1    2000
  1    3000

この結果の 0 番目のデータで更新しているため、購入回数は1、購入金額は1000となっているようです。

SQL文中の GROUP BY で o.order_id はグルーピングできないため、 o.customer_id の間違いと思われます。

src/Eccube/Repository/CustomerRepository.php
    /**
     * 会員の初回購入時間、購入時間、購入回数、購入金額を更新する
     *
     * @param $app
     * @param  Customer $Customer
     * @param  $orderStatusId
     */
    public function updateBuyData($app, Customer $Customer, $orderStatusId)
    {
        // 会員の場合、初回購入時間・購入時間・購入回数・購入金額を更新

        $arr = array($app['config']['order_new'],
                                $app['config']['order_pay_wait'],
                                $app['config']['order_back_order'],
                                $app['config']['order_deliv'],
                                $app['config']['order_pre_end'],
                        );

        $result = $app['eccube.repository.order']->getCustomerCount($Customer, $arr);

        if (!empty($result)) {
            $data = $result[0];

            $now = new \DateTime();

            $firstBuyDate = $Customer->getFirstBuyDate();
            if (empty($firstBuyDate)) {
                $Customer->setFirstBuyDate($now);
            }

            if ($orderStatusId == $app['config']['order_cancel'] ||
                    $orderStatusId == $app['config']['order_pending'] ||
                    $orderStatusId == $app['config']['order_processing']) {
                // キャンセル、決済処理中、購入処理中は購入時間は更新しない
            } else {
                $Customer->setLastBuyDate($now);
            }

            $Customer->setBuyTimes($data['buy_times']);
            $Customer->setBuyTotal($data['buy_total']);

        } else {
            // 受注データが存在しなければ初期化
            $Customer->setFirstBuyDate(null);
            $Customer->setLastBuyDate(null);
            $Customer->setBuyTimes(0);
            $Customer->setBuyTotal(0);
        }

        $app['orm.em']->persist($Customer);
        $app['orm.em']->flush();
    }


src/Eccube/Repository/OrderRepository.php
    /**
     * 会員の合計購入金額を取得、回数を取得
     *
     * @param  \Eccube\Entity\Customer $Customer
     * @param  array $OrderStatuses
     * @return QueryBuilder
     */
    public function getCustomerCount(\Eccube\Entity\Customer $Customer, array $OrderStatuses)
    {
            $result = $this->createQueryBuilder('o')
            ->select('COUNT(o.id) AS buy_times, SUM(o.total)  AS buy_total')
            ->where('o.Customer = :Customer')
            ->andWhere('o.OrderStatus in (:OrderStatuses)')
            ->setParameter('Customer', $Customer)
            ->setParameter('OrderStatuses', $OrderStatuses)
            ->groupBy('o.id')    // ★ ->groupBy('o.Customer') が正解
            ->orderBy('o.id', 'ASC')
            ->getQuery()
            ->getResult();

        return $result;
    }


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,290名です
総投稿数は109,689件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.