1. G71列車を例として、まず鉄道駅をエンコードします(1から最後の停留所)
上記のプレースホルダーを以下で簡単に説明します。G71には合計18のサイトがあります。次に、単一のシートのシート識別は、1000000000000000000000000000000000000000000000000000の18ビット長バイナリ文字列で表すことができます。各桁はサイトを表します。毎日チケットを発行する前に、以下のチケットリストに初期化されます。データは次のとおりです。残りのチケットは、シート識別の0の数に基づいて残りのチケットの最大数を決定します。
チケット予約フォームのOriginが制限されているサイトと終了サイトは、柔軟に一致させることができます(これにより、販売中の制限付きサイトを実現できます)
2。残りのチケットをクエリします
G71セカンドクラスのシートFシートチケットをクエリしたい場合は、イーストステーション(3)をbaodingした元のステーションからショーグアンステーション(15)までのfを照会したい場合は、次のSQLを実行する必要があります(このSQLは、シートの選択と車の選択の機能を実現できます)
ガイド、電車番号、電車の種類、シートタイプ、キャリッジ番号、シートコード、チケットリストからシートポジションを選択します
ここで、to_number(Substring(Seat Mark、3、15))= 0
および出発日= '2016-06-11'
およびトレーニング番号コード= 'g71'
およびサブストリング(開始制限ステーション、3、4)= 1
およびサブストリング(最終的に制限付きステーションに到着し、15、16)= 1
およびチケットステータス= '販売'
およびトレーニングタイプ= 'セカンドクラス'
およびシートポジション= 'f'
3。ブックチケット
3.1 2番目のステップでクエリ条件に従ってレコードを取得し、チケットステータスを変更してロックします
3.2ロックが成功した後、支払いが行われます
3.2支払いが成功した後、BaodingからShaoguanへのチケット(000111111111111111000)は元のチケットでマークされ、チケットのステータスは販売のために変更されます
100000000000000000 | 0001111111111110 = 100111111111111000この時点での残りのチケットロゴは、動的な残りのチケットです
3.3指定された時間が支払われない場合、このレコードのチケットステータスを販売するために復元できます。
10011111111111111000^000111111111111000 = 1000000000000000000000000000000000000000000000000000000
4。払い戻しチケット
BaodingからShaoguan(0001111111111110)へのチケットと、非運用のための対応するチケットを入手してから、チケットプールに戻ることができます。
以下は、関連するJavaコードです
java.math.bigdecimal; public class maintest {public static void main(string [] args){string titchentflag = ""; int beginstation =; int endstation =; long begintime = system.currenttimemillis(); string result = orderticket(ticketflag、begintation、endstation); if(result(ticketflag); {system.out.println( "subscription failed");} else {system.out.println( "result afth booking:" + result); //これをキャンセルする場合は、string b = buildticket()、beginstation、endstation); system.out.out.println( " System.CurrentTimeMillis(); System.out.println( "Time -suming:" +(endtime -begintime));}/***チケット予約** @param ticketflag* @param endstation* @param endstation* @prurne*/return*/private static stringticket(int int bintation、int bintation、intstation、intstation、intstation、intstation、intstation、 ""; (CheckCanticket(TicketFlag、BeginStation、EndStation)){String B = BuildTicket(TicketFlag.Length()、BeginStation、Endstation); String CurrentTicked = Toticket(TicketFlag、B); out.Println( "チケット前の結果:" + Ticketflag);チケット** @param Ticketflag* @param B* @return*/private static string lireaseticket(string titchentflag、string b){stringbuilder tempst = new StringBuilder( ""); int length = ticketflag.length(); (tempa == '' && tempb == ''){tempst.append( "");} else {tempst.append(tempa);}} return tempst.toString();}/*** create interval placeholder*** @param negd* @param begintation*/private static busittation bubtion butingtic butiontat endStation){StringBuilder ST = new StringBuilder( ""); St.ToString();}/***予約後の結果** @param Ticketflag* @Param B* @Return*/private Static String Toticket(String Ticketflag、String B){StringBuilder Tempst = new StringBuilder( ""); int length = ticketflag.length(); for(i = i <leght; i++ tempb = b.charat(i); if(tempa == '' || tempb == ''){tempst.append( "");} else {tempst.append(tempa);}} return tempst.tostring();}/*** Boolean CheckCanticket(String TicketFlag、int beginstation、int endstation){boolean result = false; string tempticket = titchentflag.substring(beginstation、endstation); bigdecimal b = new bigdecimal(tempticket);