誰かが購入したら、製品の量が十分かどうかを確認することを願っています。在庫に余剰がある場合、ユーザーはそれを正常に購入してから在庫を変更することができます。ユーザーが1つずつ購入するためにキューアップする場合、もちろん問題はありません。
しかし、実際には、複数のユーザーが同時に購入し、同時に在庫を確認するようになる可能性があります。これは、在庫のうちの1人が購入するのに十分である可能性がありますが、在庫が削減されていないため、数人の人がそれを正常に購入し、在庫は負に縮小され、過剰に縮小されます。これは、多数のユーザーが同時に同時に購入するときに発生する可能性が非常に高くなります。
したがって、注文を調整します。一部のユーザーを購入すると、最初に在庫を減らします。それからあなたはそれを減らす方法を尋ねなければなりませんか?また、在庫が1人に十分でない場合にも減りますか?
各製品には一意の購入コード(購入を開始する前に事前に作成)があり、ユーザーが取得する購入コードの数は、購入したコピーの数であると想定しています。次に、ユーザーが購入するとき、最初のステップは、ラッキーコードのステータスを有効なものから無効に変更し、購入者IDでマークを付けることです。
コードのコピーは次のとおりです。「update `lottery_number` set` status` = nivalid status、 `user_id` = buyer user id、` current_time` = current_id` = snatched product id and `status` =有効なステータス制限購入コピー ";
このようにして、MySQLは行数に影響を与えると呼ばれる返品結果を提供します。つまり、このステートメントは、影響する行の数のデータを更新します。これに影響する行数は、実際に購入した製品のコピー数です。行数が0の場合、コピーが正常に購入されなかったことを意味します。つまり、製品の購入を急いでいます。
Javaの実装:
/** *製品の購入コードを生成<大量のデータを挿入> * * @author nifury */public void insertlotterynumbers(goodsissue goodsisue){string freix = "lottery_number`(` goods_id`、 `eperions`、` create_number`、 `create` _number`) /n "; Timestamp Now = new Timestamp(system.currenttimemillis());接続con = null; try {con = jdbctemplate.getDataSource()。getConnection(); con.setautocommit(false); preatedStatement pst = con.preparestatement( ""); long total = goodsisue.getTotalshare(); //(int i = 0; i <total; i += 10000){// 10,000の提出物のstringbuffer suffix = new StringBuffer(); List <Integer>番号= new ArrayList <Integer>(); for(int j = 0; j <10000 && i+j <total; j ++){numbers.add(10000001+i+j); } collections.shuffle(numbers); //スクランブルラッキーコード(int n = 0、length = numbers.size(); n <length; n ++){suffix.append( "(" + goodsisue.getgoodsid() + "、" + goodsisue.getperiods() + "、" + " +" + " goodsisue.getissueid() + ")/n"); } //完全なsql文字列sql = prefix + suffix.substring(0、suffix.length() - 2)をビルドします。 pst.addbatch(sql); pst.executeBatch(); con.commit(); } con.setautocommit(true); // restore pst.close(); con.close(); } catch(Exception e){e.printstacktrace(); try {//トランザクションロールバックcon.rollback(); con.setautocommit(true); con.close(); } catch(sqlexception e1){e1.printstacktrace(); }// 復元する }}購入コードを割り当てる(当社のビジネスは購入コードを購入者に表示する必要があるため、返品があります)
/** *製品Issue_ID(各製品には一意の問題ごとに一意の問題がある)を介して購入コードをランダムに取得します(使用される購入コードは無効な状態に設定されます)額、long userid){list <lotterynumber> numberlist = new ArrayList <LotTeryNumber>(); try {long culntime = system.currenttimemillis();文字列updateUserid = "update` lottery_number` set `status` = 0、` user_id` =?、 `current_time` =?where` subse_id` =?and `status` = 1 lime?"; int rownum = jdbctemplate.update(updateuserid、userid、currenttime、sushid、hison); if(rownum> 0){//左右に有効な購入コードがまだありますか?object [] buyargs = {issoid、userid、cunrytime}; numberlist = jdbctemplate.query(query + "ここで、` subse_id` =?and `status` = 0および` user_id` =?and `current_time` =?"、buyargs、lotterynumbermapper); }} catch(deadlockloserdataaccessexception e){ System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。