Este artículo es una investigación sobre el módulo de pedido en la librería Javaweb.
1. Crear clases relacionadas
dominio:
Orden
Pedido
Dao: Orderdao
Servicio: servicio de orden
Web.Servlete: OrderServlet
/** * Clase de entrada de pedido */Public Class OrderItem {private String iid; privado int count;/ Cantidad Doble Subtotal privado; // pedido de pedido privado subtotal; // ordenar libro de libros privados; // Libro a comprar} /** * Clase de pedido */Orden de clase pública {String private String oid; Fecha privada Tiempo de pedido;// Tiempo de pedido Doble privado Total; // Estado privado Total Inter; // Hay cuatro tipos de estado de pedido: 1 no pagado 2 no pagado pero no enviado 3 no enviado pero no confirmado Recibe 4 Confirmado Transacción Propietario de usuarios privados;/ Propietario de pedido Dirección de cadena privada; // Dirección de envío de envío <OrdenItem> Pedido de pedido; // Todas las entradas bajo el pedido actual IRT} Public Class OrderDao {Private QueryRunner qr = new txQueryRunner (); / *** Agregar orden* @param orden*/ public void addorder (orden de orden) {try {string sql = "insertar en los valores de los órdenes (?,?,?,?,?,?)"; / * * Marca de tiempo para procesar la conversión de la fecha de Util a SQL */ TimeStamp Timestamp = new Timestamp (orden.getOrderTime (). GetTime ()); Objeto [] params = {orden.getoid (), timestamp, orden.gettotal (), orden.getState (), orden.getOwner (). Getuid (), orden.getaddress ()}; Qr.Update (SQL, Params); } catch (sqlexception e) {lanzar nueva runtimeException (e); }} /*** Insertar entrada de pedido* @param OrderItemList* /public void addOrderItemList (list <DideItem> OrderItemList) { /*** Batch (String Sql, Object [] [] de QueryRunner Clase Params)* donde los parámetros son múltiples Arrays One Dimensional! * Cada matriz unidimensional se ejecuta una vez con SQL, y múltiples matrices unidimensionales se ejecutan varias veces*/ try {string sql = "insertar en los valores de orden de orden (?,?,?,?,?)"; /** Convertir OrderItemList en una matriz bidimensional* Convertir un objeto OrderItem a una matriz unidimensional*/ objeto [] [] params = nuevo objeto [ordenitemList.size ()] []; // Reunir a través de OrderItemList y usar cada objeto OrderItem para asignar un valor a cada matriz unidimensional en params para (int i = 0; i <ordenitemList.size (); i ++) {ordenitem item = ordenitemList.get (i); Params [i] = new Object [] {item.getiid (), item.getCount (), item.getSubToTal (), item.getorder (). getoid (), item.getbook (). getBid ()}; } Qr.batch (SQL, Params); // Ejecutar procesamiento por lotes} Catch (Sqlexception e) {Throw New RuntimeException (e); }} / ** * orden de consulta por uid * @param uid * @return * / public list <sere> findByUid (string uid) { / * * 1. Consulta Toda la lista <Orden> del usuario actual a través de uid * 2. Luce a través de cada orden y cargue todos sus pedidos para él * / intente { / * * 1. Obtenga todos los órdenes de los órdenes para el usuario actual para el usuario actual * / String Sql = "Seleccione * de su orden * / intent { / * * 1. Lista <Dide> OrderList = Qr.query (SQL, New Beanlisthandler <Order> (Order.Class), uid); / * * 2. Realice cada pedido y cargue todas sus propias entradas de pedido para él */para (pedido de pedido: orden de orden) {LoadOrderIntems (orden); // Agregue todas sus entradas de pedido para el objeto de pedido}/ * * 3. Lista de pedidos de retorno */return OrderList; } catch (sqlexception e) {lanzar nueva runtimeException (e); }} / ** * Cargue todas las entradas de pedido para el orden especificado * @param orden * @throws sqlexception * / private void loadOrderIntems (orden de pedido) arroja sqlexception { / * * consulta dos tablas: ordenem, libro * / string sql = "Seleccione * de pedido I, libro B donde i.bid = b.bid y oid =?";; / * * Debido a que el conjunto de resultados de una fila ya no es un javabean, ya no puede usar beanlisthandler, sino maplisttandler */ list <map <string, object >> maplist = qr.query (sql, nuevo maplisthandler (), orden.getoid ()); / * * MAPLIST es múltiples mapas, cada mapa corresponde a una fila de conjunto de resultados * una línea: * {iid = c7ad5492f27d492189105fb50e55cbb6, count = 2, subtotal = 60.0, oid = 1ae8a70354c947f8b81b80ada6783155, bid = 7, BINDAM Hibernate, precio = 30.0, autor = zhang weiqin, image = book_img/8991366-1_l.jpg, cid = 2} * ... * * Necesitamos usar un mapa para generar dos objetos: OrderItem and Book, y luego establecer la relación entre los dos (establecer el Libro a OrderItem) *// * * Loop a través de cada mapa, usar el mapa para generar dos objetos, y luego establecer la relación (set Book a OrderItem) */ * * bucle a través de cada mapa, usar el mapa de dos objetos, y luego establecer la relación (establecer el Libro a Orderitem) */ * * bucle a través de cada mapa, usar el mapa para generar dos objetos, y luego establecer la relación (establecer el Libro a Order. OrderItem), y guarde el OrderItem*/ List <OrderItem> OrderItemList = ToOrderItemList (MapList); Order.SetOrderItemList (OrderItemList); } / ** * Convierta cada mapa en la MapList en dos objetos y establezca una relación * @param maplist * @return * / private list <SderItem> toRoRderItemList (list <map <string, object >> mapList) {list <OrderItem> OrderItemList = new ArrayList <OrderItem> (); for (map <string, object> map: maplist) {ordenitem item = toLoRderItem (map); OrderItemList.Add (Artículo); } return ordenitemList; } / ** * Convierta un mapa en un objeto OrderItem * @param map * @return * / private OrderItem toOrderItem (map <string, object> map) {ordenitem orderItem = CommonUtils.tobean (map, ordenitem.class); Libro de libros = CommonUtils.tobean (map, book.class); OrderItem.SetBook (libro); Ordene de retorno; } / ** * Carga de orden * @param oid * @return * / público load load (string oid) {try { / * * 1. Obtenga todos los pedidos del usuario actual * / String sql = "Select * de los órdenes donde oid =?"; Pedido de pedido = qr.Query (SQL, nuevo BeanHandler <Sder> (orden.class), oid); /** 2. Cargue todas sus entradas para el orden*/ LoadOrderItems (orden); /** 3. Lista de pedidos de retorno*/ pedido de retorno; } catch (sqlexception e) {lanzar nueva runtimeException (e); }} / ** * Estado del orden de consulta a través de oid * @param oid * @return * / public int getStateByoid (string oid) {try {string sql = "Seleccione estado de los órdenes donde oid =?"; return (entero) qr.Query (SQL, new ScalarHandler (), OID); } catch (sqlexception e) {lanzar nueva runtimeException (e); }} / ** * Modificar el estado del orden * @param oid * @param state * @return * / public void updateState (string oid, int state) {try {string sql = "órdenes de actualización set state =? Where oid =?"; QR.Update (SQL, Estado, OID); } catch (sqlexception e) {lanzar nueva runtimeException (e); }}} Public Class OrderService {OrderSdao OrderDao Orderdao = new OrderDao (); / *** Método de pago* @param oid*/ public void zhifu (string oid) {/** 1. Obtenga el estado del orden** Si el estado es 1, luego ejecute el siguiente código** Si el estado no es 1, entonces este método no hace nada*/ int state = ordendao.getstateByoid (oid); if (state == 1) {// Modifique el estado del pedido a 2 ordendao.updateState (oid, 2); }} / *** Agregue un orden* Requerida la transacción* @param orden* / public void add (orden de pedido) {try {// inicie la transacción jdbcutils.begintransaction (); ordendao.addorder (orden); // inserta el ordendao.AddOrderItemList (orden.getOrderItemList ()); // Inserte todas las entradas en el orden // Enviar la transacción jdbcutils.committransaction (); } Catch (Exception e) {// Rollback Transaction intenta {jdbcutils.rollbackTransaction (); } catch (sqlexception e1) {} tire new runtimeException (e); }} / ** * mi pedido * @param uid * @return * / public list <seril> myORDERS (string uid) {return ordendao.findbyUid (uid); } / ** * Orden de carga * @param oid * @return * / Public Order Load (String oid) {return ordendao.load (oid); } /** * Confirmar recibo * @param oid * @throws OrderSexception * /public void Confirm (String oid) lanza OrderSexception { / * * 1. Verifique el estado del pedido. Si no es 3, arroje una excepción */int state = ordendao.getStateByoid (oid); // Obtenga el estado del pedido if (State! = 3) tire una nueva OrdeneRexception ("La confirmación del pedido falló, ¡no es algo bueno!"); /** 2. Modifique el estado del pedido a 4, lo que indica que la transacción es exitosa*/ ordendao.updateState (oid, 4); }} Public Class OrderServlet extiende BaseServlet {OrderService privado OrderService = new OrderService (); / ** * Pague al banco * * @param Solicitud * @param respuesta * @return * @throws servletException * @throws ioexception */ public string zhifu (httpservletRequest solicitud, respuesta httpServletResponse) lanza ServletException, IOException {Properties props = New Properties ();; InputStream Input = this.getClass (). GetClassLoader () .getResourCeasstream ("MerchantInfo.Properties"); Props.Load (entrada); /** Preparar 13 parámetros*/ String p0_cmd = "comprar"; Cadena p1_merid = props.getProperty ("p1_merid"); Cadena p2_order = request.getParameter ("oid"); Cadena p3_amt = "0.01"; Cadena p4_cur = "cny"; Cadena p5_pid = ""; Cadena p6_pcat = ""; Cadena p7_pdesc = ""; Cadena p8_url = props.getProperty ("p8_url"); Cadena p9_saf = ""; Cadena pa_mp = ""; Cadena pd_frpid = request.getParameter ("PD_FRPID"); Cadena pr_needResponse = "1"; / * * Calcule 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, PA_MP, PD_FRPID, PR_NEEDRESPONSE, KEYVALUE); /** Conecte la URL de yibao y 13+1 parámetros*/ 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); /** Redirigir a yibao*/ respuesta.sendedirect (url.ToString ()); regresar nulo; } /*** Este método es el método de devolución de llamada Yibao. ¡Debemos determinar si el Yibao está llamando a este método! * * @param solicitud * @param respuesta * @return * @throws servletException * @throws ioexception */ public string back (httpservletRequest solicitud, httpServletResponse Response) lanza ServletException, ioexception {/ * * 1. Obtenga 11 + 1 */ String p1_merid = request.getParameter ("P1_Merid"); ");");); Cadena r0_cmd = request.getParameter ("R0_CMD"); Cadena r1_code = request.getParameter ("r1_code"); Cadena r2_trxid = request.getParameter ("r2_trxid"); Cadena r3_amt = request.getParameter ("r3_amt"); Cadena r4_cur = request.getParameter ("r4_cur"); Cadena r5_pid = request.getParameter ("r5_pid"); Cadena r6_order = request.getParameter ("R6_order"); Cadena r7_uid = request.getParameter ("r7_uid"); Cadena r8_mp = request.getParameter ("r8_mp"); Cadena r9_btype = request.getParameter ("r9_btype"); Cadena hmac = request.getParameter ("HMAC"); / * * 2. Verifique si el visitante es Yibao! */ Propiedades props = new Properties (); InputStream Input = this.getClass (). GetClassLoader () .getResourCeasstream ("MerchantInfo.Properties"); Props.Load (entrada); String keyValue = props.getProperty ("keyValue"); boolean bool = paymayUtil.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 verificación falla request.setAttribute ("msg", "¡No eres algo bueno!"); return "f: /jsps/msg.jsp"; }/** 3. Obtenga el orden de estado, determine si desea modificar el estado del pedido y agregar puntos y otras operaciones comerciales*/OrderService.zhifu (R6_order); // ¡Es posible operar la base de datos, o puede no funcionar! /** 4. Determine el método actual de devolución de llamada* Si es punto a punto, debe retroalimentar la cadena que comienza con el éxito*/ if (r9_btype.equals ("2")) {Response.getWriter (). Imprime ("éxito"); } / * * 5. Guarde la información de éxito y reenvíela a msg.jsp * / request.setAttribute ("msg", "¡Pago exitoso! Espere al vendedor que envíe! ¡Espere ~"); return "f: /jsps/msg.jsp"; } /** * Confirme el recibo * * @param solicitud * @param respuesta * @return * @throws servletException * @throws ioexception * /public string confirma (httpservletRequest solicitud, httpServletResponse Respuesta) que se lanza ServletException, IOException { / * * 1. Obtenga parámetros de parámetros 2. Método de servicio de llamadas> si hay una excepción, hay una excepción, guarda la información de la excepción y la información de la excepción. 3. * Guarde la información exitosa y reenvíe a msg.jsp */ string oid = request.getParameter ("oid"); intente {OrderService.confirm (oid); request.setAttribute ("msg", "Felicitaciones, ¡la transacción es exitosa!"); } catch (OrderSexception e) {request.SetAttribute ("msg", e.getMessage ()); } return "f: /jsps/msg.jsp"; } /** * orden de carga * * @param solicitud * @param Respuesta * @return * @throws servletException * @throws ioexception * /public string load (httpservletRequest solicitud, httpServletResponse Respuesta) lanza ServletException, ioException { / * * 1. Obtener el parámetro OID 2. Usar OID para llamar el Método de servicio para obtener el Método de servicio 3. /jsps/order/desc.jsp */request.setattribute ("Order", OrderService.Load (request.getParameter ("oid"))); return "f: /jsps/order/desc.jsp"; } /** * mi pedido * * @param solicitud * @param respuesta * @return * @throws servletException * @throws ioException * /public string myORDERS (httpservletRequest solicitud, httpServletResponse respuesta) lanza ServletException, ioexception { / * * 1. Obtenga el usuario actual de la sesión y luego obtenga su uid 2. OrderService#MyORDERS (UID) para obtener todos los pedidos de la lista de usuarios <Orden> 3. * Guarde la lista de pedidos en el campo de solicitud y reenvíe a /jsps/order/list.jsp */user user = (user) request.getSession (). getAttribute ("session_user"); Lista <Dide> OrderList = OrderService.Myorders (user.getuid ()); request.setAttribute ("OrderList", OrderList); return "f: /jsps/order/list.jsp"; } /** * Agregue un orden para usar el automóvil en la sesión para generar un objeto de pedido * * @param solicitud * @param respuesta * @return * @throws servletException * @throws ioexception * /public string add (httpservletRequest solicitud, httpservletreponse respuesta) lanza servletException, ioexception { / * * * 1. Get carro 2. Método para completar el pedido 4. * Guarde el pedido en el campo Solicitud y reenvíe a /jsps/order/desc.jsp */// Obtener carrito de session CART CART = (CART) request.getSession (). getAttribute ("carro"); // Convertir el carrito en un objeto de pedido/ * * Crear un objeto de pedido y establecer el atributo * * CART -> Order */ Order Order = New Order (); orden.setoid (comúnuTils.uuid ()); // establecer el número de orden.setOrderTime (nueva fecha ()); // Establecer orden.setState (1); // Establezca el estado del pedido en 1, lo que indica que el pago no se paga user user = (usuario) request.getSession (). GetAttribute ("session_user"); orden.setOwner (usuario); // Establezca el pedido del pedido Order.settotal (CART.GetToTal ()); // Establezca el total de pedidos y obtenga el total de CART/ * * Crear una colección de entrada de pedido * * CartitEmList -> OrderItemList */ List <OrderItem> OrderImList = New ArrayList <SderItem> (); // Reunir a través de todos los cartitems en el carrito, use cada objeto Cartitem para crear un objeto OrderItem y agréguelo a la colección para (Cartitem Cartitem: CART.GetCartitems ()) {OrderItem oi = New OrderItem (); // Crear una entrada de pedido oi.setiid (CommonUtils.uuid ()); oi.setCount (Cartitem.getCount ()); // Establezca el número de entradas oi.setbook (Cartitem.getBook ()); // Establezca el libro oi.setsubtotal (Cartitem.getSubtotal ()); // Establezca la subtotal de la entrada oi.setorder (orden); // Agregue todas las entradas de pedido al pedido de pedido.setOrderItemList (OrderItemList); // borrar el carrito de compras. CLEAR (); // ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// request.setAttribute ("orden", orden); return "/jsps/order/desc.jsp"; }}2. Generar un pedido
3. Mi pedido (Verifique por el usuario)
4. Cargue el pedido (Verifique por ID)
5. Confirme el recibo
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.