Este artigo é uma pesquisa sobre o módulo de ordem na livraria Javaweb.
1. Crie classes relacionadas
domínio:
Ordem
Ordem
DAO: Orderdao
Serviço: OrderService
Web.Servlete: OrderServlet
/** * Classe de entrada de pedidos */public class OrderItem {private String iid; private int contagem; // Quantidade private duplo subtotal; // Ordem de ordem privada subtotal; // Pedido Livro privado; // livro a ser comprado} /** * Classe de pedido */Public Class Order {private string oid; Data de data privada Tempo de ordem; // Tempo de pedido duplo privado Total; // Total privado int estado; // Existem quatro tipos de status do pedido: 1 não pago 2 não pago, mas não é enviado 3 não enviado, mas não confirmou o recebimento 4 transação confirmada proprietária do usuário privado bem -sucedido; // O proprietário do proprietário da string privada Endereço; public class OrderDao {private Queryrunner qr = new TxQueryRunner (); / *** Adicionar ordem* @param order*/ public void Addorder (ordem de ordem) {tente {string sql = "Insira nos valores dos pedidos (?,?,?,?,?)"; / * * Timestamp para processar a conversão da data do Util para SQL */ Timestamp Timestamp = new Timestamp (Order.GetorderTime (). GetTime ()); Objeto [] params = {order.getoid (), timestamp, order.gettotal (), order.getState (), order.getowner (). GetUid (), order.getAddress ()}; qr.Update (SQL, params); } catch (sqLexception e) {lança a nova run timeException (e); }} /*** Insira a entrada do pedido* @param orderItemList* /public void addordetemList (list <lorberItem> orderItemList) { /*** em lote (string sql, objeto [] [] de classes de Queryrunner params)* onde os parâmetros são múltiplas matrizes unidimensionais! * Cada matriz unidimensional é executada uma vez com SQL, e várias matrizes unidimensionais são executadas várias vezes*/ tente {string sql = "inserir nos valores do ordem (?,?,?,?)"; /** Converta o OrderItemList em uma matriz bidimensional* Converta um objeto OrderItem em uma matriz unidimensional*/ objeto [] [] params = new Object [OrderItemList.size ()] []; // Faça um loop através do OrderItemList e use cada objeto OrderItem para atribuir um valor a cada matriz unidimensional em parâmetros para (int i = 0; i <orderItemList.size (); i ++) {OrderItem item = OrderItemList.get (i); params [i] = new Object [] {item.getiid (), item.getCount (), item.getSubtotal (), item.getOrder (). getOid (), item.getBook (). getbid ()}; } qr.batch (sql, params); // Executar processamento em lote} catch (sqLexception e) {lança a nova execução do tempo de execução (e); }} / ** * Ordem de consulta por UID * @param uid * @return * / list public <loctor> findbyuid (string uid) { / * * 1. Consulta toda a lista <locomer> do usuário atual através de uid * 2. List <Order> orderlist = qr.Query (SQL, New BeanlistHandler <Order> (Order.class), UID); / * * 2. Faça um loop através de cada pedido e carregue todas as suas próprias entradas de pedido para ele */para (Ordem Order: OrderList) {loadRordEdItems (ordem); // Adicione todas as entradas do pedido para o objeto de ordem}/ * 3. } catch (sqLexception e) {lança a nova run timeException (e); }} / ** * Carregue todas as entradas de pedido para a ordem especificada * @param pedido * @throws sqLexception * / private void loadterordetems (ordem do pedido) lança sqLexception { / * * consulta duas tabelas: orderem, livro * / string sql = "selecione * do orderem i, reserva B onde i.bed = b.bido e oid ="; / * * Como o conjunto de resultados de uma linha não é mais um Javabean, você não pode mais usar o beanlisthandler, mas maglistHandler */ list <map <string, object >> mapList = qr.Query (sql, new maglisthandler (), order.get.getOr ()); / * * MapList são vários mapas, cada mapa corresponde a uma linha de conjunto de resultados * uma linha: * {iid = c7ad5492f27d492189105fb50e55cbb6, contagem = 2, subtotal = 60.0, oid = 1ae8a70354477F8B81B8B8.0, = 1AE8a70354477F8B81B8B8B8.0, 1ae8a70354477F8B81B8B8B8.0, = 1ae8a70354477F8B81B8b81B8.0. Em hibernato, preço = 30.0, autor = zhang weiqin, imagem = book_img/8991366-1_l.jpg, cid = 2} * ... * * Precisamos usar um mapa para gerar dois objetos:/OrderItem e livro, e depois estabelecer os dois, o uso do mapa para se estabelecer) *// * * * * * * * * * * * * * * *. O resultado final é um ordem) e salve o pedido*/ list <leterItem> orderItemList = toOrderItemList (MapList); order.setorderItemlist (OrderItemList); } / ** * Converta cada mapa no MapList em dois objetos e estabeleça um relacionamento * @param mapList * @return * / Lista privada <LeerDItem> toOrderItemList (list <pp <pin String, object>> mapList) {list <leterItem> orderItemList = new Arraylist <lordaItem> (); for (map <string, object> map: mapList) {OrderItem item = toOrderItem (map); orderItemlist.add (item); } retornar orderItemList; } / ** * Converta um mapa em um objeto OrderItem * @param map * @return * / private orderItem toOrderItem (map <string, object> map) {orderItem orderItem = Commonutils.tobean (map, orderItem.class); Livro do livro = CommonUtils.Tobean (mapa, book.class); OrderItem.SetBook (livro); Retornar OrderItem; } / ** * Carregar pedido * @param oid * @return * / ladra de pedido público (string oid) {tente { / * * 1. Obtenha todos os pedidos do usuário atual * / string sql = "selecione * de ordens onde oid =?"; Ordem da ordem = Qr. /** 2. Carregue todas as suas entradas para ordem*/ LoadRerdItems (ordem); /** 3. Lista de pedidos de retorno*/ Ordem de retorno; } catch (sqLexception e) {lança a nova run timeException (e); }} / * * retornar (número inteiro) Qr. } catch (sqLexception e) {lança a nova run timeException (e); }} / ** * Modifique o status da ordem * @param oid * @param state * @return * / public void updateState (string oid, int state) {try {string sql = "update ordens define estado =? Onde oid =?"; qr.update (SQL, estado, OID); } catch (sqLexception e) {lança a nova run timeException (e); }}} classe pública OrderService {Private OrderDao OrderDao = new OrderDao (); / *** Método de pagamento* @param oid*/ public void zhifu (string oid) {/** 1. Obtenha o status da ordem** se o status for 1, execute o seguinte código** Se o status não for 1, então esse método não fará nada*/ int state = ordDao.getStateByoid (oid); if (estado == 1) {// modifica o status do pedido em 2 orderdao.updatestate (oid, 2); }} / *** Adicione uma ordem* transação necessária* @param order* / public void add (ordem de ordem) {try {// Inicie a transação jdbcutils.begIntransaction (); orderdao.addorder (ordem); // insira o orderdao.addorderitemlist (Order.getorderItemList ()); // Insira todas as entradas na ordem // Envie a transação jdbcutils.committransaction (); } Catch (Exceção e) {// Transação de reversão tente {jdbcutils.rollbacktransaction (); } catch (sqLexception e1) {} lança nova run timeException (e); }} / ** * meu pedido * @param uid * @return * / list public <dand> myorders (string uid) {return orderdao.findbyuid (uid); } / ** * Carregar pedido * @param oid * @return * / ladra de pedido público (string oid) {return orderdao.load (oid); } /** * Confirme o recibo * @param oid * @THOWS ORDEREXCCOMPECT * /public void confirm (string oid) lança ordeRexception { / * * 1. Verifique o status do pedido. Se não for 3, jogue uma exceção */int state = orderdao.getStateByoid (OID); // Obtenha o status do pedido se (estado! = 3) lança nova Orderexception ("A confirmação do pedido falhou, você não é uma coisa boa!"); /** 2. Modifique o status da ordem em 4, indicando que a transação é bem -sucedida*/ orderdao.UpDatestate (OID, 4); }} classe pública OrderServlet estende BasEServlet {Private OrderService OrderService = new OrderService (); / ** * pague no banco * * @param request * @param Resposta * @return * @throws servletexception * @throws ioexception */ public string zhifu (httpServletReQuest Solicy, httpServletResponse) lança servleTexception, IoException {Proppesties = New Propriedades (novas propriedades) lança servleTexception, IoException {Proppesties = NOVA PROPRESENTIES (NOVAS () InputStream input = this.getClass (). GetClassLoader () .GetResourCeasStream ("MerchantInfo.properties"); props.load (entrada); /** Prepare 13 parâmetros*/ string p0_cmd = "compra"; 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"; / * * Calcule hmac */ string keyvalue = props.getProperty ("keyvalue"); String hmac = PaggetUtil.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, NNEEDR, P8_URL, /** Conecte o URL de Yibao e 13+1 parâmetros*/ stringbuilder url = new StringBuilder (props.getProperty ("url")); url.append ("? p0_cmd ="). Append (p0_cmd); url.append ("& p1_merid ="). Apênder (p1_merid); url.append ("& p2_order ="). Apênder (p2_order); url.append ("& p3_amt ="). Append (p3_amt); url.append ("& p4_cur ="). Apênder (p4_cur); url.append ("& p5_pid ="). Apênder (p5_pid); url.append ("& p6_pcat ="). Apênder (p6_pcat); url.append ("& p7_pdesc ="). Apênder (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 ="). Apênder (pd_frpid); url.append ("& pr_needResponse ="). Append (pr_needResponse); url.append ("& hmac ="). Apênder (hmac); System.out.println (URL); /** Redireciona para yibao*/ Response.sendRedirect (url.toString ()); retornar nulo; } /*** Este método é o método de retorno de chamada de Yibao. Devemos determinar se o Yibao está chamando esse método! * * @param request * @param Resposta * @return * @throws servletexception * @throws ioexception */ public string back (httpServletRequest Solicy, httpServletResponse resposta) lança servleTException, ioexcence {/ * 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. Verifique se o visitante é Yibao! */ Properties Props = new Properties (); InputStream input = this.getClass (). GetClassLoader () .GetResourCeasStream ("MerchantInfo.properties"); props.load (entrada); String keyvalue = props.getProperty ("keyvalue"); boolean bool = PaggentUtil.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) {// se a verificação falhar request.setAttribute ("msg", "você não é uma coisa boa!"); retornar "f: /jsps/msg.jsp"; }/** 3. Obtenha a ordem de status, determine se você deseja modificar o status do pedido e adicione pontos e outras operações comerciais*/OrderService.zhifu (r6_order); // é possível operar o banco de dados ou não pode operar! /** 4. Determine o método de retorno de chamada atual* Se for ponto a ponto, você precisará fazer comentários na sequência começando com o sucesso*/ if (r9_btype.equals ("2")) {Response.getWriter (). Print ("success"); } / * * 5. Salve as informações de sucesso e encaminhe -as para msg.jsp * / request.setAttribute ("msg", "pagamento bem -sucedido! Aguarde o vendedor enviar! Você espera ~"); retornar "f: /jsps/msg.jsp"; } /** * Confirme o recibo * * @param request * @param Resposta * @return * @throws servletexception * @throws ioexception * /public string confirm (httpServLeTrequest Solicy, httpServLetResponse Response) lança servleTexception, ioexception { / * * 1. msg.jsp 3. * Salve as informações bem -sucedidas e encaminhe para msg.jsp */ string oid = request.getParameter ("oid"); tente {OrderService.Confirm (OID); request.setattribute ("msg", "Parabéns, a transação é bem -sucedida!"); } catch (ordeRexception e) {request.setAttribute ("msg", e.getMessage ()); } retornar "f: /jsps/msg.jsp"; } /** * Carregando ordem * * @param request * @param Resposta * @return * @throws servletexception * @throws ioexception * /public string load (httpServletRequest solicitação, httpServletSponse Response) lança servleTexception, o ioexception { / * * 1. /jsps/order/desc.jsp */request.setattribute ("order", orderservice.load (request.getParameter ("oid")); retornar "f: /jsps/order/desc.jsp"; } /** * meu pedido * * @param request * @param resposta * @return * @throws servletexception * @throws ioexception * /public string myorders (httpServLeTrequest Solicy, httpServLetResponse) lança o servleTexception, ut utexception { / * * 1. OrderService#Myorders (UID) para obter todos os pedidos da lista de usuários <DOMERD> 3. * Salve a lista de pedidos no campo de solicitação e encaminhe para /jsps/order/list.jsp */user user = (user) request.getSession (). getAttribute ("session_user"); Lista <Derm> OrderList = OrderService.myorders (user.getuid ()); request.setAttribute ("OrderList", Listlist); retornar "f: /jsps/order/list.jsp"; } /** * Adicione uma ordem para usar o carro na sessão para gerar um objeto de pedido * * @param request * @param Resposta * @return * @throws servletexception * @throws ioexception * /public string add (httpServletRequest Solicy, httpSertResponse 1. o método de serviço para concluir o pedido 4. * Salvar o pedido no campo Solicitação e encaminhar para /jsps/order/desc.jsp */// Receba carrinho do carrinho de sessão carrinho = (carrinho) request.getSession (). getAttribute ("carrinho"); // Converta o carrinho em um objeto de ordem/ * * Crie um objeto de ordem e defina o atributo * * carrinho -> ordem */ ordem de ordem = new Order (); order.setOid (CommonUtils.uuid ()); // Defina o número de ordem.setorderTime (new Date ()); // Definir ordem.SetState (1); // Defina o status do pedido como 1, indicando que o pagamento não é pago usuário do usuário = (usuário) request.getSession (). GetAttribute ("session_user"); ordem.setwner (usuário); // Defina o pedido do Order.setTotal (Cart.getTotal ()); // Defina o total do pedido e obtenha o total do carrinho/ * * Crie uma coleção de entrada de pedidos * * CartItemList -> OrderItemList */ list <OrderItem> orderItemList = novo Arraylist <loryList> (); // Fazia através de todos os cartiMs no carrinho, use cada objeto CartItem para criar um objeto OrderItem e adicione -o à coleção (CartItem CartItem: Cart.getCartItems ()) {OrderItem oi = new OrderItem (); // Crie uma entrada de ordem Oi.Setiid (Commonutils.uUid (); oi.setCount (cartItem.getCount ()); // Defina o número de entradas oi.setBook (cartItem.getBook ()); // Defina o livro oi.SetSubtotal (cartItem.getSubtotal ();); // Adicione todas as entradas de pedido ao pedido do pedido.setorderItemlist (OrderItemList); // limpe o carrinho de compras carrinho.clear (); // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////5 request.setAttribute ("order", ordem); retornar "/jsps/order/desc.jsp"; }}2. Gere um pedido
3. Meu pedido (verifique pelo usuário)
4. Carregue o pedido (check por id)
5. Confirme o recibo
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.