バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

先着1,000社 プラグインダウンロード&お申込で1,000円分Amazonギフト券プレゼント amazon pay
広告掲載について

サイト内検索

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

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2018/6/8 9:23
対応状況: 解決済
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 504
受注情報を更新すると購入回数と購入金額が初回購入時のものにリセットされる
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の機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2018/6/8 10:03
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 504
Re: 受注情報を更新すると購入回数と購入金額が初回購入時のものにリセットされる
本件、EC-CUBE3.0.15にて改修されていることを確認しました。


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

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


 



ログイン


EC-CUBEペイメント

統計情報

総メンバー数は27,139名です
総投稿数は86,366件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1735
4
yuh
1497
5
red
1161
6
umebius
1007
7
468
1004
8
fukap
907
9
shutta
827
10
tsuji
815
11 ramrun 789
12
tao_s
651
13 karin 647
14 sumida 641
15
homan
633
16 DELIGHT 571
17
h_tanaka
504
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

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

Copyright© LOCKON CO.,LTD. All Rights Reserved.