Dieser Artikel ist eine Untersuchung des Auftragsmoduls im Javaweb -Buchladen.
1. Erstellen Sie verwandte Klassen
Domain:
Befehl
OrderItem
DAO: Orderdao
Service: OrderService
web.servlete: orderServlet
/** * Bestelleintragsklasse */öffentliche Klasse OrderItem {private String iid; private int count; // Menge Private Double Subtotal; // Subtotale private Bestellung; // Bestellung privates Buchbuch; // Buch zu erworben} /** * Bestellklasse */öffentliche Klasse Order {private String oid; private Datumsauftragszeit; // Bestellzeit privates Doppel -Gesamtsumme; // Gesamt private int -Status; // Es gibt vier Arten von Bestellstatus: 1 Nicht bezahlt 2 nicht bezahlt, aber nicht versendet 3 nicht versendet, aber nicht bestätigtem Quittung bestätigt 4 bestätigte Transaktion erfolgreicher privater Benutzerbesitzer; // Bestellung Eigentümer Private String -Adresse; // Versandadresse private Liste <HeorderItem> orderItem; public class orderdao {private queryRunner qr = new txqueryRunner (); / *** Bestellung hinzufügen* @param order*/ public void addorder (order order) {try {string sql = "In Bestellwerte einfügen (?,?,?,?,?,?)"; / * * Zeitstempel zur Verarbeitung der Konvertierung des Datums von Util in SQL */ Timestamp Timestamp = New Timestamp (order.getOrdertime (). GetTime ()); Object [] params = {order.getoid (), timestamp, order.gettotal (), order.getState (), order.getOwner (). Getuid (), order.getAddress ()}; QR.Update (SQL, Params); } catch (SQLEXception e) {neue RunTimeException (e) werfen; }} /*** Bestelleintrag einfügen* @param OrderItemList* /public void addorderItemlist (Liste <RodeMItem> orderItemlist) { /*** Batch (String SQL, Object [] [] von QueryRunner-Klasse Params)* wobei Params mehrere eindimensionale Arrays sind! * Jedes eindimensionale Array wird einmal mit SQL ausgeführt, und mehrere eindimensionale Arrays werden mehrmals ausgeführt. /** OrdnenImlist konvertieren in ein zweidimensionales Array* Konvertieren Sie ein orderItem-Objekt in ein eindimensionales Array*/ Object [] [] params = new Object [ordnungsImlist.size ()] []; // Schleifen Sie die OrderItemList durch und verwenden Sie jedes OrderItem-Objekt, um jedem eindimensionalen Array in Params einen Wert zuzuweisen (int i = 0; i <orderItemList.size (); i ++) {orderitem item = ordigemList.get.get (i); params [i] = new Object [] {item.getiid (), item.getCount (), item.getSuBtotal (), item.getOrder (). getoid (), item.getbook (). GETBID ()}; } qr.batch (SQL, Params); // Batch -Verarbeitung ausführen} catch (SQLEXception E) {neue runTimeexception (e) werfen; }} / ** * Abfragebestell von uid * @param uid * @return * / publiclist <order> findByUid (String uid) { / * * 1. Abfrage alle Liste <order> des aktuellen Benutzers über uid * 2. Schleifen Sie durch jede Bestellung und laden Sie alle Reihenfolge für IT * / try { / * * * 1. List <Reoring> orderList = qr.Query (SQL, New BeanlistHandler <Heors> (order.class), UID); / * * 2. Schleifen Sie alle Bestellungen durch und laden Sie alle eigenen Bestelleinträge dafür */für (Order Order: OrderList) {LoadorderItems (Reihenfolge); // Fügen Sie alle Bestelleinträge für das Auftragsobjekt hinzu}/ * * 3. Return Bestellliste */Rückgabeauftrag. } catch (SQLEXception e) {neue RunTimeException (e) werfen; }} / ** * Alle Auftragseinträge für die angegebene Reihenfolge * @param order * @throws SQLEXception * / private voidOrderItems (Order Order) löscht SQLEXception { / * * Abfrage zwei Tabellen: Orderem, Buch * / String SQL = "Ausgewählte * aus Orderem I, Buch B, wo I.bid = B.bid und oid und oid =?"; / * * Da die Ergebnismenge einer Zeile kein Javabäer mehr ist, können Sie BeanlistHandler nicht mehr verwenden, sondern Maplisthandler */ list <map <String, Objekt >> maplist = qr.Query (SQL, New Maplisthandler (), Order.getoid ()); / * * MAPLIST ist mehrere Karten, jede Karte entspricht einer Zeile von Ergebnismengen * eine Zeile: * {iid = C7AD5492F27D492189105fb50e55CBB6, Count = 2, subtotal = 60,0, OID = 1AE8A70354C947F81B80ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAGE). Hibernate, Preis = 30,0, Autor = Zhang Weiqin, Image = book_img/8991366-1_l.jpg, CID = 2} * ... * * Wir müssen eine Karte verwenden, um zwei Objekte zu generieren: orderitem und buchen und buchen dann die Beziehung zwischen zwei (Set Book to ordnungsweise). ein OrderItem) und speichern Sie die orderItem*/ list <Roderitem> orderItemList = toorderItemList (MAPLIST); order.setRorderItemList (OrderItemList); } / ** * Konvertieren Sie jede Karte in der MAPLIST in zwei Objekte und stellen Sie eine Beziehung fest * @param MAPLIST * @RETURN * / private Liste <Roderitem> ToorderItemList (Liste <map <String, Objekt >> MAPLIST) {list <OrderItem> orderItemlist = new ArrayList <RoderInItem> (); für (map <string, object> map: mapList) {orderItem item = toorderItem (map); orderItemList.add (item); } return orderItemList; } / ** * eine Karte in ein orredItem -Objekt umwandeln * @param map * @return * / private orderItem toorderItem (map <String, Object> map) {orderItem orderItem = CommonUtils.tobean (map, orderItem.class); Book book = CommonUtils.tobean (Karte, book.class); OrderItem.Setbook (Buch); Return OrderItem; } / ** * last order * @param oid * @return * / public order load (string oid) {try { / * * 1. Alle Bestellungen des aktuellen Benutzers erhalten * / String SQL = "Auswählen * aus Bestellungen, wo oid =?"; Order order = qr.Query (SQL, New BeanHandler <Revery> (order.class), OID); /** 2. laden Sie alle Einträge für die Reihenfolge*/ loadorderItems (Reihenfolge); /** 3. Return Order List*/ Rückgabeauftrag; } catch (SQLEXception e) {neue RunTimeException (e) werfen; }} / ** * Anfragestatus über oid * @param oid * @return * / public int getStatebyoid (String OID) {try {string sql = "SELECT STATION aus Bestellungen, wo oid =?"; return (Integer) qr.Query (SQL, New ScalarHandler (), OID); } catch (SQLEXception e) {neue RunTimeException (e) werfen; }} / ** * Bestellstatus ändern * @param oid * @param status * @return * / public void updatestate (String OID, int status) {try {string sql = "Aktualisieren ordnungsbestellungen set SET SETET SETELS =? WO OID =?"; Qr.Update (SQL, State, OID); } catch (SQLEXception e) {neue RunTimeException (e) werfen; }}} public class orderService {private orderdao orderdao = new OrderDao (); / *** Zahlungsmethode* @param oid*/ public void zhifu (String OID) {/** 1. Erhalten Sie den Status der Reihenfolge** Wenn der Status 1 ist, führen Sie den folgenden Code************** Wenn der Status nicht 1 ist, dann tut diese Methode nichts*/ int state = orderdao.getSyoid (oid); if (state == 1) {// den Bestellstatus in 2 orderdao.UpDatestate (oid, 2) ändern; }} / *** eine Bestellung hinzufügen* Transaktion erforderlich* @param order* / public void add (order order) {try {// Die Transaktion jdbcutils.ebegintransaction () starten; OrderDao.Addorder (Order); // fügen Sie die orderdao.addorderItemList (order.getorderItemList ()) ein; // Alle Einträge in der Bestellung einfügen // die Transaktion jdbcutils.committransaction () einreichen; } catch (Ausnahme e) {// Rollback -Transaktion try {jdbcutils.rollbacktransaction (); } catch (SQLEXception E1) {} neue RunTimeException (e) werfen; }} / ** * meine Bestellung * @param uid * @return * / publiclist <order> myorders (String uid) {return orderDao.findbyUid (uid); } / ** * last order * @param oid * @return * / public order load (string oid) {return orderDao.load (oid); } /** * Bestätigen Sie die Quittung * @param oid * @throws orderexception * /public void bestätigen (String OID) löst orderexception { / * * 1. Überprüfen Sie den Bestellstatus. Wenn es nicht 3 ist, werfen Sie eine Ausnahme */int state = orderdao.getStateByoid (OID); // Erhalten Sie den Bestellstatus, wenn (Zustand! = 3) neue orderexception werfen ("Die Bestätigungsbestätigung ist fehlgeschlagen, Sie sind keine gute Sache!"); /** 2. Ändern Sie den Bestellstatus auf 4 und geben an, dass die Transaktion erfolgreich ist*/ orderdao.updatestate (oid, 4); }} öffentliche Klasse orderServlet erweitert BaseServlet {private orderService orderService = new orderService (); / ** * an die Bank bezahlen * * @param Anfrage * @param antwort * @return * @throws ServletException * @throws ioException */ public String zhifu (httpServletRequest Request, httpServletResponse -Antwort). InputStream input = this.getClass (). GetClassloader () .GetResourceAsStream ("MerchantInfo.Properties"); props.load (Eingabe); /** Erstellen 13 Parameter*/ String p0_cmd = "buy"; String p1_merid = props.getProperty ("p1_merid"); String p2_order = request.getParameter ("oid"); String p3_AMT = "0,01"; String p4_cur = "cny"; String p5_pid = ""; String p6_pcat = ""; String p7_pdesc = ""; String p8_url = props.getProperty ("p8_url"); String p9_saf = ""; String pa_mp = ""; String pd_frpid = request.getParameter ("pd_frpid"); String pr_needResponse = "1"; / * * Berechnen Sie HMAC */ string keyValue = props.getProperty ("keyValue"); String hmac = paymentUtil.buildHMAC (p0_cmd, p1_merid, p2_order, p3_amt, p4_cur, p5_pid, p6_pcat, p7_pdesc, p8_url, p9_saf, pd_frpid, pr_needressponse, keyvalue); /** Verbinden Sie die URL von Yibao und 13+1 Parametern*/ StringBuilder url = new StringBuilder (props.getProperty ("url")); url.append ("? p0_cmd ="). append (p0_cmd); url.append ("& p1_merid ="). append (p1_merid); url.append ("& p2_order ="). append (p2_order); url.append ("& p3_amt ="). append (p3_amt); url.append ("& p4_cur ="). append (p4_cur); url.append ("& p5_pid ="). append (p5_pid); url.append ("& p6_pcat ="). append (p6_pcat); url.append ("& p7_pdesc ="). append (p7_pdesc); url.append ("& p8_url ="). append (p8_url); url.append ("& p9_saf ="). append (p9_saf); url.append ("& pa_mp ="). append (pa_mp); url.append ("& pd_frpid ="). append (pd_frpid); url.append ("& pr_needresponse ="). append (pr_needResponse); url.append ("& hmac ="). append (hmac); System.out.println (URL); /** Umleiten auf yibao*/ response.sendredirect (url.toString ()); null zurückkehren; } /*** Diese Methode ist die Yibao -Rückrufmethode. Wir müssen feststellen, ob der Yibao diese Methode nennt! * * @param request * @param antwort * @return * @throws ServletException * @throws ioException */ public String zurück (httpServletRequest Request, httpServletResponse) löst servleTexception, ioException {/ * * 1. String r0_cmd = request.getParameter ("r0_cmd"); String r1_code = request.getParameter ("r1_code"); String r2_trxid = request.getParameter ("r2_trxid"); String R3_AMT = Request.getParameter ("R3_AMT"); String r4_cur = request.getParameter ("r4_cur"); String r5_pid = request.getParameter ("r5_pid"); String r6_order = request.getParameter ("r6_order"); String R7_UID = Request.getParameter ("R7_UID"); String r8_mp = request.getParameter ("r8_mp"); String r9_bType = request.getParameter ("r9_bType"); String hmac = request.getParameter ("hmac"); / * * 2. Überprüfen Sie, ob der Besucher Yibao ist! */ Properties props = neue Eigenschaften (); InputStream input = this.getClass (). GetClassloader () .GetResourceAsStream ("MerchantInfo.Properties"); props.load (Eingabe); String keyValue = props.getProperty ("keyValue"); boolean bool = paymentutil.verifyCallback (HMAC, p1_merid, r0_cmd, r1_code, r2_trxid, r3_amt, r4_cur, r5_pid, r6_order, r7_uid, r8_mp, r9_btype, keyValue); if (! bool) {// Wenn die Überprüfung fehlschlägt Request.SetAtTribute ("msg", "Sie sind keine gute Sache!"); return "f: /jsps/msg.jsp"; }/** 3. Erzählen Sie die Statusreihenfolge, stellen Sie fest, ob Sie den Bestellstatus ändern möchten, und fügen Sie Punkte und andere Geschäftsvorgänge hinzu*/orderService.zhifu (r6_order); // Es ist möglich, die Datenbank zu betreiben, oder es kann möglicherweise nicht funktionieren! /** 4. Bestimmen Sie die aktuelle Rückrufmethode* Wenn es sich um Punkt zu Punkt handelt, müssen Sie die Zeichenfolge, die mit Erfolg beginnt*/ if (r9_bType.equals ("2") {response.getWriter (). Print ("Erfolg") feedback. } / * * 5. Speichern Sie die Erfolgsinformationen und leiten Sie sie an msg.jsp * / request.setAttribute weiter ("msg", "Zahlung erfolgreich! Warten Sie, bis der Verkäufer versendet wird! Sie warten ~"); return "f: /jsps/msg.jsp"; } /** * Bestätigen Sie die Quittung * * @param Anfrage * @param Antwort * @return * @throws ServletException * @throws ioException * /public String bestätigen (httpServletRequest Request, httpServletRespletRePletRespect). * Speichern Sie die erfolgreichen Informationen und leiten Sie an msg.jsp */ string oid = request.getParameter ("oid"); try {orderService.confirm (oid); request.setattribute ("msg", "Herzlichen Glückwunsch, die Transaktion ist erfolgreich!"); } catch (orderexception e) {request.setAttribute ("msg", e.getMessage ()); } return "f: /jsps/msg.jsp"; } /** * Ladereihenfolge * * @param request * @param response * @return * @throws ServletException * @throws ioException * /public String load (httpServletRequest Request, httpServletRespectRect) wirft die ServletException aus. /JSPS/order/Desc.jsp */request.setattribute ("order", orderService.load (request.getParameter ("oid")); return "f: /jsps/order/desc.jsp"; } /** * Meine Bestellung * * @param request * @param antwort * @return * @throws ServletException * @throws ioException * /public string myorders (httpServletRequest request, httpServletRePletRePletRePlet -Antwort) Throws ServletException, IOException { / * * * 1. Nehmen Sie den aktuellen Benutzer von der Session ab und erhalten Sie die Session und erhalten Sie die Session ab. orderService#myorders (UID), um alle Bestellungen der Benutzerliste <Heors> 3 zu erhalten. * Speichern Sie die Auftragsliste in das Feld Anforderungsfeld und leiten Sie sie an /jssps/order/List.jsp */user user = (user) request.getSession (). getAtTribute ("Session_user"). Liste <Reors> orderList = orderService.myorders (user.getuid ()); request.setAttribute ("orderList", orderList); return "f: /jsps/order/List.jsp"; } /** * Fügen Sie eine Bestellung hinzu, um das Auto in der Sitzung zu verwenden, um ein Bestellobjekt zu generieren Methode zur Vervollständigung der Bestellung 4. * Save -Bestellung im Feld Anforderungsfeld und weiterhin an /jsps/order/desc.jsp */// CART aus Session CART = (CART) request.getSession (). GetAtTribute ("CART"); // Wagen in ein Auftragsobjekt konvertieren/ * * Erstellen Sie ein Auftragsobjekt und setzen Sie das Attribut * * CART -> Order */ order order = new order (); order.setoid (Commonutils.UUID ()); // Setzen Sie die Nummer order.setordertime (neues Datum ()); // order.setState (1); // den Bestellstatus auf 1 festlegen, wodurch die Zahlung nicht bezahlt wird user user = (user) request.getSession (). GetAtTribute ("Session_user"); order.setowner (Benutzer); // Setzen Sie den Bestellbesitzer bestellen. // Schaufeln Sie alle Kartiteln im Cart durch, verwenden Sie jedes Cartitem -Objekt, um ein OrderItem -Objekt zu erstellen, und fügen Sie es der Sammlung für (Cartitem Cartitem: Cartsem.GetCartitems ()) {orderitem oi = new OrderItem (); // Erstellen eines Bestelleintrags oi.setiid (CommonUtils.) () //). Legen Sie die Anzahl der Einträge fest. order.setRorderItemList (OrderItemList); // den Einkaufswagen löschen. Clear (); // ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// Request.SetAttribute ("Order", Order); return "/jsps/order/desc.jsp"; }}2. Erstellen Sie eine Bestellung
3.. Meine Bestellung (nach dem Benutzer überprüfen)
4. Laden Sie die Bestellung (prüfen Sie nach ID)
5. Bestätigen Sie die Quittung
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.