バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Adondevas
投稿日時: 2011/6/7 16:09
対応状況: −−−
常連
登録日: 2011/6/7
居住地:
投稿: 52
注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
はじめまして。 2.11.1 を運用したく、色々勉強しております。

表題の件ですが、基本仕様では「1」よりの連番がふられていますが、
これを注文時の時間に変更したいと思っています。

例: 20110607-160101-1234

どのファイルをどのように変更すればできるでしょうか。
ご教示いただければ幸いです。

よろしくお願い申し上げます。
nkta
投稿日時: 2011/6/7 17:17
対応状況: −−−
長老
登録日: 2011/5/20
居住地: 東京
投稿: 166
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
受注番号は「半角数字のみ」を想定しているため、「-(ハイフン)」が混ざるとなると
EC-CUBE全体のカスタマイズが必要になってくると思います。
Adondevas
投稿日時: 2011/6/7 18:55
対応状況: −−−
常連
登録日: 2011/6/7
居住地:
投稿: 52
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
ご返信ありがとうございます。
大規模なカスタマイズは望んでおりませんので、下記のように訂正いたします。

例: 20110607.160101.1234
or: 201106071601011234

引き続き、よろしくお願い申し上げます。
i8w
投稿日時: 2011/6/7 19:56
対応状況: −−−
新米
登録日: 2011/4/12
居住地: 沖縄県
投稿: 7
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
dtb_orderテーブルのorder_id列はint型で、「201106071601011234」
とするとint型の範囲を超えてしまいます。

月日時分秒だと収まりますが、最小単位が秒ですし、一年経つと
さらにキーがぶつかる可能性があるのでお勧めできません。

なぜ注文番号を変更したいのでしょう?
大規模なカスタマイズを避けたいのであれば、注文番号はそのままで
別の解決策を模索した方が良い気がします。
nkta
投稿日時: 2011/6/7 20:13
対応状況: −−−
長老
登録日: 2011/5/20
居住地: 東京
投稿: 166
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
どこを変えるかとなると
data/class/pages/shopping/LC_Page_Shopping_Confirm.php 143行目ですが…
ミリ秒まで入れるとなると、i8wさんも仰っているように、注文番号がINT型なので、桁制限をオーバーしてしまいます。

注文番号をデータとして持つのが注文テーブルだけではないので、やっぱり影響範囲が大きそうです。
(パッと思いつくのがdtb_order,dtb_order_detail,dtb_order_temp,dtb_shipping,…あと何があったっけ)
Adondevas
投稿日時: 2011/6/7 21:11
対応状況: −−−
常連
登録日: 2011/6/7
居住地:
投稿: 52
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
みなさんご返信ありがとうございます。

わたしは店舗を運営する立場なので気になるのかもしれませんが、
このところ、ネットショップは専業・副業ともに乱立しています。

同業者であれば、その店の一注文あたりの平均単価の予測は容易です。

例えば、半年に一回、数カ月に一回、興味のある店で最も安い品を購入すれば、
その店の一ヶ月あたりの販売件数や売上を予測することができます。

これは、かなりの情報をライバル店に渡すことになります。

変換テーブルのようなものを作って、受注メールなどへの
顧客に伝える受注番号を年月日時秒などに変換して送信出来れば
この問題は解決できるのですが、、、
patapata
投稿日時: 2011/6/8 1:02
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
・・・・えっと、別にお客に表示する注文番号を管理すればいいだけでは?
メールで表示される注文番号がインクリメントされただけのデータだと、売り上げ想像がつきますが、「表示しない」もしくは別のものにすればと私は思います。
コスト考えるとそっちの方がはるかに楽ですし
Adondevas
投稿日時: 2011/6/8 9:44
対応状況: −−−
常連
登録日: 2011/6/7
居住地:
投稿: 52
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
仙人さん ご返信ありがとうございます。

おっしゃる通りで、顧客が目にする注文番号と管理上の注文番号を
別に出来る方法があれば、それで目的は達成できます。

その方法はどのようにすればよいでしょうか。
よろしくお願い申し上げます。
nkta
投稿日時: 2011/6/8 11:58
対応状況: −−−
長老
登録日: 2011/5/20
居住地: 東京
投稿: 166
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
もしくは、受注番号を生成する方法を
 ・桁制限に収まる範囲で、ランダムに
 ・ただし重複がないように
と変更してもよさそうな気がします。

という事で書いてみました。
受注データが増えるほどパフォーマンスが低下する方法ですが
10万や20万程度の受注件数なら影響は少ないと思います。多分。

data/class/pages/shopping/LC_Page_Shopping_Confirm.php 143行目を以下のように変更

    $this->arrForm["order_id"] = $objQuery->nextval("dtb_order_order_id");
        ↓
    $this->arrForm["order_id"] = $this->getRandomOrderId();


で、以下の関数をLC_Page_Shopping_Confirmクラスのどこかに追加

    function getRandomOrderId()
    {
        $min = 1;
        $max = 2147483647;
        $objQuery = new SC_Query();
        while (1) {
            $order_id = mt_rand($min, $max);
            if ($objQuery->count("dtb_order", "order_id=$order_id")) {
                continue;
            } else {
                break;
            }
        }
        return $order_id;
    }
red
投稿日時: 2011/6/8 12:08
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1570
Re: 注文番号を連番ではなく、注文日-時間-分-秒(ミリセコンド)に変更したい
受注が同時に大量に来た場合、この方式だとかぶる可能性が出るので駄目です。。

受注tableをロックすれば重複する可能性は下がりますが、パフォーマンスの低下が著しいです
(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は89,074名です
総投稿数は110,023件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.