Cet article est une recherche sur le module de commande de la librairie Javaweb.
1. Créer des classes connexes
domaine:
Commande
Commandant
DAO: OrderDao
Service: Commandement
web.servlete: OrderServlet
/ ** * Classe de saisie de commande * / classe publique ordonnance {chaîne privée iid; private int count; // quantité privée double subtotal; // commande de commande privée subtotale; // commander un livre privé; // réserver à acheter} / ** * CLASSE DE COMMANDE * / CLASSE PUBLIC ORDRE {Private String OID; Date privée Date OrderTime; // Commande Temps privé Double Total; // Total Private int State; // Il existe quatre types de statut de commande: 1 non payé 2 non payé mais non expédié 3 non expédié mais non confirmé la liste privée de la transaction confirmée> OrderItemList; // Tous les entrées sous la commande actuelle} classe publique OrderDao {private queryRunner qr = new txQueryRunner (); / ** * Ajouter l'ordre * @param Ordre * / public void addOrder (Order Order) {try {String sql = "Insérer dans les valeurs d'ordres (?,?,?,?,?,?)"; / * * Horodatage pour le traitement de la conversion de la date de util en sql * / horodatage horodat-horodatage = nouveau horodat (order.getOrderTime (). GetTime ()); Objet [] params = {order.getoid (), horodat, order.getTotal (), order.getState (), order.getowner (). GetUid (), order.getAddress ()}; qr.update (SQL, params); } catch (sqlexception e) {throw new RuntimeException (e); }} / ** * Inserter la saisie de la commande * @param ordonnancemList * / public void addOrderItemList (list <C.C.C.C.C.C.CommanteMist) {/ ** * Batch (String SQL, objet [] [] de la classe de questionrunner params) * où les paramètres sont plusieurs tableaux unidimensionnels! * Chaque tableau unidimensionnel est exécuté une fois avec SQL, et plusieurs tableaux unidimensionnels sont exécutés plusieurs fois * / try {String sql = "INSERT IN ORDERITEM VALEURS (?,?,?,?,?)"; / * * Convertir OrderItemList en un tableau bidimensionnel * Convertissez un objet OrderItem en un tableau unidimensionnel * / objet [] [] params = nouvel objet [ORDERITEMLIST.SIZE ()] []; // Loop via le commandermist et utilisez chaque objet OrderItem pour attribuer une valeur à chaque tableau unidimensionnel dans params pour (int i = 0; i <orditemList.size (); i ++) {ordonnance item = orditemList.get (i); params [i] = nouvel objet [] {item.getiid (), item.getCount (), item.getSubTotal (), item.getOrder (). getoid (), item.getbook (). getbid ()}; } qr.batch (sql, params); // Exécuter le traitement par lots} catch (sqlexception e) {throw new RuntimeException (e); }} / ** * Ordre de requête par uid * @param uid * @return * / public list <ord> findByuid (String uid) {/ * * 1. Query All List <ord> de l'utilisateur actuel via UID * 2. Loop via chaque commande et chargez tous ses commandes pour cela * / essayez {/ * * 1. Obtenez toutes les ordonnances pour l'utilisateur actuel * / String sql = "SELECT * List <ord> orderList = qr.Query (sql, new Beanlisthandler <ord> (ordonnance.class), uid); / * * 2. Loop via chaque commande et chargez toutes ses propres entrées de commande pour elle * / pour (Order Order: OrderList) {LoadOrderItems (Ordre); // Ajouter toutes ses entrées de commande pour l'objet d'ordre} / * * 3. RETRIER Order List * / return OrderList; } catch (sqlexception e) {throw new RuntimeException (e); }} / ** * Chargez toutes les entrées de commande pour l'ordre spécifié * @param Ordre * @throws sqlexception * / private void lostOrderItems (Order Order) lève Sqlexception {/ * * requête deux tables: OrdreM, book * / String sql = "select * FROM ORDEREM I, book b Where I.bid = b.bid et oid =?"; / * * Parce que l'ensemble de résultats d'une ligne n'est plus un JavaBean, vous ne pouvez plus utiliser Beanlisthandler, mais MapListhandler * / List <Map <String, Object >> MapList = Qr.Query (SQL, new MapListhandler (), Order.Getoid ()); / * * maplist est plusieurs cartes, chaque carte correspond à une ligne de résultats de résultats * une ligne: * {iid = c7ad5492f27d492189105fb50e55cbb6, count = 2, subtotal = 60,0, oid = 1Ae8a70354c947f8b81b80ada6783155, bid = 7, bname = Bn81 Hibernate, prix = 30.0, auteur = zhang weiqin, image = book_img / 8991366-1_l.jpg, cid = 2} * ... * * Nous devons utiliser une carte pour générer deux objets: ordonnance et book, puis établir la relation entre les deux (set book to commanderm) * / * * LOOP est le résultat final, le résultat final, utilise la carte pour générer deux objets, puis sur la relation (puis sur le résultat final est le résultat, le résultat final, le résultat final, le résultat final, le résultat final, le résultat, le résultat final, le résultat est de générer pour deux objets, puis la relation (UNE RÉSULTAT ES un ordonnance), et enregistrez l'OrderItem * / list <C.C.C.C.C.C.C.C.C.C.C.C.Com OrdItemList = toorderItemList (maplist); order.setOrderItemList (OrderItemList); } / ** * Convertissez chaque carte dans la MapList en deux objets et établissez une relation * @param maplist * @return * / private list <ordItem> toOrderItemList (list <map <string, objet >> maplist) {list <ordItem> ORDERITEMLIST = new ArrayList <C.C.C.ComdItem> (); for (map <string, objet> map: maplist) {ordonniem item = toorderItem (map); orditemList.add (item); } return OrderItemList; } / ** * Convertir une carte en un objet OrderItem * @param map * @return * / private orderItem toOrderItem (map <string, object> map) {OrderItem orderItem = Commonutils.tobean (map, orditem.class); Livre de livres = Commonutils.Tobean (carte, livre.class); ORDERITEM.SETBOOK (livre); Retour ordonnance; } / ** * Ordre de chargement * @param oid * @return * / Public Order Load (String oid) {try {/ * * 1. Obtenez toutes les ordres de l'utilisateur actuel * / chaîne sql = "select * dans les ordres où oid =?"; ORDANCE ORDANCE = QR.Query (SQL, New BeanHandler <Order> (Order.Class), OID); / * * 2. Chargez toutes ses entrées pour l'ordre * / LoadOrderItems (ordre); / * * 3. Return Order List * / Retour Order; } catch (sqlexception e) {throw new RuntimeException (e); }} / ** * Statut d'ordre de requête via oid * @param oid * @return * / public int getStateByoid (string oid) {try {String sql = "select state dans les ordres où oid =?"; return (Integer) qr.Query (SQL, new ScalarHandler (), OID); } catch (sqlexception e) {throw new RuntimeException (e); }} / ** * Modifier l'état de l'ordre * @param oid * @param état * @return * / public void updateState (String oid, int state) {try {String sql = "update orders set state =? Where oid =?"; QR.Update (SQL, State, OID); } catch (sqlexception e) {throw new RuntimeException (e); }}} classe publique OrderService {private OrderDao OrderDao = new OrderDao (); / ** * Méthode de paiement * @param oid * / public void zhifu (String oid) {/ * * 1. Obtenez l'état de l'ordre * * Si l'état est 1, exécutez le code suivant * * Si le statut n'est pas 1, alors cette méthode ne fait rien * / int state = OrderDao.getStateByoid (OID); if (state == 1) {// Modifiez l'état de l'ordre à 2 orderDao.updateState (OID, 2); }} / ** * Ajouter une commande * Transaction requise * @param Ordre * / public void add (Order Order) {try {// Démarrer la transaction jdbcutils.begintransaction (); OrderDao.AdDorder (Order); // insérer le OrderDao.AdDorderItemList (Order.GetOrderItemList ()); // insérer toutes les entrées dans la commande // Soumettre la transaction jdbcutils.comitTransaction (); } catch (exception e) {// transaction de rollback try {jdbcutils.rollbacktransaction (); } catch (sqlexception e1) {} lance un nouveau RuntimeException (e); }} / ** * mon ordre * @param uid * @return * / public list <ord> myorders (string uid) {return orderDao.findByUID (uid); } / ** * Ordre de chargement * @param oid * @return * / Public Order Load (String OID) {return OrderDao.Load (OID); } / ** * Confirmer Receipt * @param oid * @throws OrdereXception * / public void Confirm (String OID) lève OrdreReXception {/ * * 1. Vérifiez l'état de la commande. Si ce n'est pas 3, lancez une exception * / int state = orderDao.getStateByoid (OID); // Obtenez l'état de la commande si (état! = 3) Jetez une nouvelle OrdreRexception ("La confirmation de commande a échoué, vous n'êtes pas une bonne chose!"); / * * 2. Modifiez l'état de la commande à 4, indiquant que la transaction est réussie * / orderDao.updateState (OID, 4); }} La classe publique OrderServlet étend BasEservlet {privé OrderService OrderService = new OrderService (); / ** * Payez à la banque * * @param demande * @param réponse * @return * @throws servlexception * @throws ioException * / public String Zhifu (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioException {Properties props = nouvelles propriétés (); InputStream input = this.getClass (). GetClassLoader () .getResourceAsStream ("MerchantInfo.Properties"); Prophes.load (entrée); / * * Préparer 13 paramètres * / String p0_cmd = "acheter"; 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_needRessage = "1"; / * * Calculer hmac * / string keyValue = props.getProperty ("keyValue"); String HMAC = PAYSETUTIL.BUILDHMAC (P0_CMD, P1_MERID, P2_ORD, P3_AMT, P4_CUR, P5_PID, P6_PCAT, P7_PDESC, P8_URL, P9_SAF, PA_MP, PD_FRPID, PR_NEEDRESPATION, KEYVALUE); / * * Connectez l'URL de yibao et 13 + 1 paramètres * / stringBuilder url = new StringBuilder (propuls.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_pdescs); 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_neeseRasponse ="). APPEND (PR_NEEDESPONSON); url.append ("& hmac ="). APPEND (HMAC); System.out.println (URL); / * * Redirection vers yibao * / réponse.sendRedirect (url.toString ()); retourner null; } / ** * Cette méthode est la méthode de rappel Yibao. Nous devons déterminer si le Yibao appelle cette méthode! * * @param request * @param réponse * @return * @throws servlexception * @throws ioException * / public String back (httpservletRequest request, httpservletResponse réponse) lance ServletException, ioException {/ * * 1. Get 11 + 1 * / String p1_merid = request.getParameter ("P1_Merrid"); 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. Vérifiez si le visiteur est Yibao! * / Properties props = nouvelles propriétés (); InputStream input = this.getClass (). GetClassLoader () .getResourceAsStream ("MerchantInfo.Properties"); Prophes.load (entrée); String keyValue = props.getProperty ("keyValue"); Boolean bool = PaymentTutil.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) {// Si la vérification échoue request.setAttribute ("msg", "Vous n'êtes pas une bonne chose!"); return "f: /jsps/msg.jsp"; } / * * 3. Obtenez l'ordre d'état, déterminez si vous souhaitez modifier l'état de la commande et ajoutez des points et autres opérations commerciales * / OrderService.zhifu (R6_Order); // Il est possible d'exploiter la base de données, ou il peut ne pas fonctionner! / * * 4. Déterminez la méthode de rappel actuelle * Si elle est point à point, vous devez faire comment la chaîne commençant par Success * / if (r9_btype.equals ("2")) {réponse.getWriter (). Print ("Success"); } / * * 5. Enregistrez les informations de réussite et transmettez-la à msg.jsp * / request.setAttribute ("msg", "paiement réussi! Attendez que le vendeur expédie! Vous attendez ~"); return "f: /jsps/msg.jsp"; } / ** * Confirmer le reçu * * @param demande * @param réponse * @return * @throws servlexception * @throws ioException * / public String Confirm (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioException {/ * * 1. Obtenez des informations sur les paramètres de l'appel. 3. * Enregistrez les informations réussies et transmettez à msg.jsp * / string oid = request.getParameter ("oid"); essayez {orderService.confirm (OID); request.setAttribute ("msg", "Félicitations, la transaction est réussie!"); } catch (OrdeRexception e) {request.setAttribute ("msg", e.getMessage ()); } return "f: /jsps/msg.jsp"; } / ** * Ordre de chargement * * @param demande * @param réponse * @return * @throws servlexception * @throws ioException * / public String Load (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioException {/ * * 1. Get Oid Parameter 2. /jsps/order/desc.jsp * / request.setAttribute ("Order", orderService.load (request.getParameter ("OID"))); return "f: /jsps/order/desc.jsp"; } / ** * Ma commande * * @param demande * @param réponse * @return * @throws servlexception * @throws ioException * / public String myorders (httpservletRequest request, httpservletResponse réponse) lance Servlexception, ioException {/ * * 1. Obtenez l'utilisateur actuel de la session et puis obtenez son uid 2. ORDERSERVICE # Myorders (UID) pour obtenir toutes les commandes de la liste d'utilisateurs <ordre> 3. * Enregistrez la liste de commandes sur le champ de demande et transmettez à /jsps/order/list.jsp * / utilisateur utilisateur = (utilisateur) request.getSession (). getAttribute ("Session_User"); List <ord> orderList = orderService.myorders (user.getUid ()); request.setAttribute ("OrderList", OrderList); return "f: /jsps/order/list.jsp"; } / ** * Ajouter une commande pour utiliser la voiture dans la session pour générer un objet de commande * * @param demande * @param réponse * @return * @throws servlexception * @throws ioexception * / public String add (httpservletRequest request, httpservletResponse réponse) lance le serviltException, l'appel 3. Méthode pour terminer la commande 4. * Enregistrer la commande sur le champ de demande et transmettre à /jsps/Order/Desc.jsp * / // Obtenez le panier de Cart Cart de session = (CART) request.getSession (). GetAttribute ("CART"); // Convertissez le panier en un objet d'ordre / * * Créez un objet d'ordre et définissez l'attribut * * CART -> ORDAND * / ORDAND Order = new Order (); ORDER.SETOID (Commonutils.UUID ()); // Définissez le numéro d'ordre.SetOrderTime (new Date ()); // Définir Order.SetState (1); // Définissez l'état de la commande sur 1, indiquant que le paiement n'est pas un utilisateur utilisateur = (utilisateur) request.getSession (). GetAttribute ("Session_user"); order.setowner (utilisateur); // Définissez le propriétaire de l'ordre Ordre.SetTotal (cart.getTotal ()); // Définissez le total de la commande et obtenez le total de CART / * * Créer une collection de saisie de commande * * CartemList -> OrderItemList * / list <C.C. // Boucle via tous les cartitems dans le cart, utilisez chaque objet Cartem pour créer un objet OrderItem et ajoutez-le à la collection pour (Cartem Cartem: Cart.getCartitems ()) {OrderItem oi = new OrderItem (); // Créer une ID de commande de l'entrée de l'entrée de l'entrée de l'entrée oi.setCount (Cartem.getCount ()); // Définissez le nombre d'entrées oi.setbook (Cartem.getBook ()); // Définissez le livre OI.SetsubTotal (Cartitem.getSubTotal ()); // Définit le sous-Tototal de l'entrée OI.SetOrder (Order); // Définit l'Ordre ItemList.Addd (OI); // Ajouter toutes les entrées de commande à l'ordre Order.SetOrderItemList (OrderItemList); // effacer le panier de pansement.Clear (); // ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// request.setAttribute ("Order", Order); return "/jsps/order/desc.jsp"; }}2. Générer une commande
3. Ma commande (vérifiez par l'utilisateur)
4. Chargez la commande (vérifier par id)
5. Confirmer le reçu
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.