이 기사는 Javaweb 서점의 주문 모듈에 대한 연구입니다.
1. 관련 클래스를 만듭니다
도메인:
주문하다
순서
Dao : Orderdao
서비스 : Orderservice
web.servlete : Orderservlet
/** * 주문 입력 클래스 */public class orderitem {private string iid; Private Int Count; // 수량 개인 이중 하위 토탈; // 하위 대형 개인 주문 주문; // 개인 서적을 주문하십시오. // 구매할 책}} /** * 주문 클래스 */public class Order {private String oid; 개인 날짜 주문 시간; // 주문 시간 개인 이중 총계; // 총 개인 int 상태; // 4 가지 유형의 주문 상태가 있습니다. 1 지불하지 않지만 지불하지 않지만 배송되지 않지만 확인되지 않음 4 확인 된 거래 성공적인 개인 소유자; // 주문 개인 목록 <sumentitem> orderitemlist; // 현재 주문의 모든 참가자} Public Class Orderdao {Private QueryRunner QR = New TxQueryRunner (); / *** 순서 추가* @param order*/ public void addorder (Order Order) {try {string sql = "주문 값에 삽입 (?,?,?,?,?)"; / * * UTIL 날짜를 SQL로 변환하기위한 타임 스탬프 */ 타임 스탬프 타임 스탬프 = 새로운 타임 스탬프 (Order.GetOrderTime (). getTime ()); Object [] params = {order.getoid (), timeStamp, order.getTotal (), order.getSte (), order.getowner (). getUid (), order.getAddress ()}; qr.update (SQL, Params); } catch (sqlexception e) {throw new runtimeexception (e); }} /*** 순서 입력 삽입* @param orderitemlist* /public void addOrderItemList (list <orderitem> orderitemList) { /*** 배치 (QueryRunner 클래스 매개 변수의 String SQL, Object [] []]) * 각 1 차원 배열은 SQL로 한 번 실행되며 여러 1 차원 배열이 여러 번 실행됩니다*/ try {String SQL = "OrderItem 값 (?, ?, ?, ?,?)"; /** OrderItemList를 2 차원 배열로 변환* OrderItem 객체를 1 차원 배열로 변환*/ Object [] [] params = new Object [OrderItemList.Size ()]; // OrderItemList를 통해 루프하고 각 OrderItem 객체를 사용하여 각 1 차원 배열에 값을 할당합니다 (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 ()}; . }} / ** * UID * @Param UID * @Param List * / public list <ordert> findByUid (string UID) { / * * 1. Query Query Query Query Query Query uid * 2를 통해 현재 사용자의 모든 목록 <sert> 각 순서를 통해 루프를 통과하고 모든 순서를로드하고 { / * 1에 대한 모든 순서를 얻으십시오 * / string * / string *. List <sord> orderlist = QR.Query (SQL, New Beanlisthandler <order> (Order.class), UID); / * * 2. 각 순서를 통해 루프하고 IT에 대한 자체 주문 항목을 모두로드하십시오 */for (Order Order : OrderList) {loadOrderItems (Order); // 주문 개체에 대한 모든 주문 항목을 추가하십시오}/ * * 3. Return Order List */return OrderList; } catch (sqlexception e) {throw new runtimeexception (e); }} / ** * 지정된 순서에 대한 모든 순서 항목을로드 * @param order * @throws sqlexception * / private void loadorderItems (주문 순서) 던지기 sqlexception { / * * 쿼리 두 테이블 : orderem, book * / string sql = "select *에서 book b. / * * 행의 결과 세트는 더 이상 javabean이 아니기 때문에 더 이상 Beanlisthandler를 사용할 수 없지만 maplisthandler */ list <map <string, object >> maplist = qr.query (sql, new maplisthandler (), order.getoid ()); / * * Maplist는 다중 맵이며, 각 맵은 결과 세트 행 * 한 줄에 해당합니다. 한 줄 : * {iid = C7AD5492F27D492189105FB50E55CBB6, COUNT = 2, SUBTOTAL = 60.0, OID = 1AE8A70354C4C4C947F8B81B80ADA67831555, BIDETOL = 7831555, BIDENAN Hibernate, Price = 30.0, author = zhang weiqin, image = book_img/8991366-1__l.jpg, cid = 2} * ... * * 우리는 두 가지 개체를 생성하기 위해 맵을 사용해야합니다. 순서와 책 사이의 관계 (순서 대상) *// * * */ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *는 두 개의 대상을 사용하고, 각각의 대상을 생성하고, 두 개의 맵을 생성합니다. ORDERITEM) 및 ORDERITEM*/ LIST <SERDITEM> ORDERITEMLIST = TOORDERITEMLIST (Maplist)를 저장합니다. Order.SetOrderItemList (OrderItemList); } / ** * 메이프리스트의 각 맵을 두 개 객체로 변환하고 관계를 설정하고 * @param maplist * @return * / private list <orderitem> toOrderItemList (list <map <string, object >> maplist) {list <orderitem> orderitemlist = new arrayList <orderitem> (); for (map <string, object> map : maplist) {orderitem item = toorderItem (map); orderitemlist.add (항목); } return OrderItemList; } / ** * 맵을 OrderItem 객체로 변환 * @param map * @return * / private OrderItem toOrderItem (map <string, object> map) {OrderItem OrderItem = commonutils.tobean (map, orderitem.class); 책 책 = commonutils.tobean (지도, book.class); Orderitem.setbook (Book); 반품 순서; } / ** *로드 순서 * @param oid * @return * / public Order Load (String Oid) {try { / * * 1. 현재 사용자의 모든 순서를 가져옵니다 * / string sql = "oid =?"; Order Order = QR.Query (SQL, New Beanhandler <Order> (Order.Class), OID); /** 2. 순서*/ loadOrderItems (Order)에 대한 모든 항목을로드합니다. /** 3. 반환 주문 목록*/ 반품 주문; } catch (sqlexception e) {throw new runtimeexception (e); }} / ** * oid * @param oid * @return * / public int getstatebyoid (string oid)를 통한 쿼리 주문 상태 {try {String sql = "Oid =?"; return (Integer) QR.Query (SQL, New ScalarHandler (), OID); } catch (sqlexception e) {throw new runtimeexception (e); }} / ** * 주문 상태 수정 * @param oid * @param state * @return * / public void updatestate (문자열 oid, int state) {try {string sql = "업데이트 순서 set state =? where oid =?"; qr.update (SQL, State, OID); } catch (sqlexception e) {throw new runtimeexception (e); }}} 공개 클래스 Orderservice {private orderdao orderdao = new OrderDao (); / *** 결제 방법* @param oid*/ public void zhifu (문자열 oid) {/** 1. 순서 상태를 가져옵니다** 상태가 1이면 다음 코드를 실행하면 다음 코드를 실행하십시오** 상태가 1이 아닌 경우,이 메소드는 아무것도하지 않습니다*/ int state = OrderDAO.getSteByoid (OID); if (state == 1) {// 순서 상태를 2 orderdao.updatestate (Oid, 2)로 수정합니다. }} / *** 주문 추가* 트랜잭션 필요* @param order* / public void add (주문) {try {// 트랜잭션 시작 jdbcutils.begintransaction (); Orderdao.addorder (주문); // orderdao.addordorteTemlist를 삽입합니다 (Order.GetOrderItemList ()); // 순서로 모든 항목을 삽입 // 트랜잭션 제출 jdbcutils.commitTransaction (); } catch (예외 e) {// 롤백 트랜잭션 try {jdbcutils.rollbacktransaction (); } catch (sqlexception e1) {} 새로운 runtimeexception (e) 던지기; }} / ** * my order * @param uid * @return * / public list <order> myorders (string uid) {return orderdao.findbyuid (uid); } / ** *로드 오더 * @param oid * @return * / public Order Load (String Oid) {return orderdao.load (OID); } /** * 영수증 확인 * @param oid * @throws orderexception * /public void 확인 (문자열 oid)은 OrdereXception { / * * 1. 주문 상태를 확인합니다. 3이 아닌 경우 예외를 던지십시오 */int state = orderdao.getStateByoid (OID); // (state! = 3) New OrderException을 던지면 순서 상태를 가져옵니다 ( "주문 확인 실패, 좋은 일이 아닙니다!"); /** 2. 주문 상태를 4로 수정하여 거래가 성공했음을 나타냅니다*/ OrderDao.upDatestate (OID, 4); }} public class Orderservlet는 baseServlet {private OrderserVice Orderservice = new Orderservice (); / ** * 은행에 지불 * * @param request * @param response * @return * @throws servletexception * @throws ioexception */ public string zhifu (httpservletrequest 요청, httpservletrepsonse 응답) servletexception, ioxception {properties proppss = new 속성 (); inputStream input = this.getClass (). getClassLoader () .getResourCeasStream ( "merchantInfo.Properties"); props.load (입력); /** 13 매개 변수 준비*/ String P0_CMD = "구매"; 문자열 p1_merid = props.getProperty ( "p1_merid"); 문자열 p2_order = request.getParameter ( "oid"); 문자열 p3_amt = "0.01"; 문자열 p4_cur = "cny"; 문자열 p5_pid = ""; 문자열 p6_pcat = ""; 문자열 p7_pdesc = ""; 문자열 p8_url = props.getProperty ( "p8_URL"); 문자열 p9_saf = ""; 문자열 pa_mp = ""; 문자열 pd_frpid = request.getParameter ( "pd_frpid"); 문자열 pr_needResponse = "1"; / * * hmac */ string keyvalue = props.getProperty ( "keyValue"); 문자열 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_needRespronge); /** yibao의 URL과 13+1 매개 변수를 연결*/ 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); /** yibao로 리디렉션*/ response.sendRedirect (url.toString ()); 널 리턴; } /***이 메소드는 Yibao 콜백 메소드입니다. Yibao 가이 방법을 호출하는지 여부를 결정해야합니다! * * @param request * @param response * @return * @throws servletexception * @throws ioexception */ public string back (httpservletrequest request, httpservletreponse responsk) servletexception, ioexception {/ * 1. get 11 */ string p1_merid = request.getparameter ( "p1_merid"); 문자열 r0_cmd = request.getParameter ( "r0_cmd"); 문자열 r1_code = request.getParameter ( "r1_code"); 문자열 r2_trxid = request.getParameter ( "r2_trxid"); 문자열 r3_amt = request.getParameter ( "r3_amt"); 문자열 r4_cur = request.getParameter ( "r4_cur"); 문자열 r5_pid = request.getParameter ( "r5_pid"); 문자열 r6_order = request.getParameter ( "r6_order"); 문자열 r7_uid = request.getParameter ( "r7_uid"); 문자열 r8_mp = request.getParameter ( "r8_mp"); 문자열 r9_btype = request.getParameter ( "r9_btype"); 문자열 hmac = request.getParameter ( "hmac"); / * * 2. 방문자가 Yibao인지 확인하십시오! */ 속성 소품 = 새로운 속성 (); inputStream input = this.getClass (). getClassLoader () .getResourCeasStream ( "merchantInfo.Properties"); props.load (입력); 문자열 keyValue = props.getProperty ( "keyValue"); Boolean bool = paymentUtil.VerifyCallback (HMAC, P1_MAC, 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) {// 확인에 실패하면 request.setAttribute ( "msg", "당신은 좋은 일이 아닙니다!"); "f : /jsps/msg.jsp"를 반환합니다. }/** 3. 상태 순서를 받고 주문 상태를 수정할지 여부를 결정하고 포인트 및 기타 비즈니스 운영*/Orderservice.zhifu (r6_order); // 데이터베이스를 작동 할 수 있거나 작동하지 않을 수 있습니다! /** 4. 현재 콜백 메소드를 결정* 포인트 간 인 경우 성공으로 시작하는 문자열을 피드백해야합니다*/ if (r9_btype.equals ( "2")) {response.getWriter (). print ( "success"); } / * * 5. 성공 정보를 저장하고 msg.jsp * / request.setAttribute ( "msg", "지불 성공! 판매자가 배송 될 때까지 기다립니다! 기다립니다 ~"); "f : /jsps/msg.jsp"를 반환합니다. } /** * 영수증 확인 * * @param request * @param response * @return * @throws servletexception * @throws ioexception * /public string (httpservletrequest request, httpservletrequest responsk)) servletexception, ioexception { / * 1. msg.jsp 3. * 성공적인 정보를 저장하고 msg.jsp */ string oid = request.getParameter ( "OID"); try {Orderservice.confirm (OID); request.setAttribute ( "msg", "축하합니다. 거래가 성공했습니다!"); } catch (OrdereXception e) {request.setAttribute ( "msg", e.getMessage ()); } return "f : /jsps/msg.jsp"; } /** * 순서로드 * * @param request * @param response * @return * @throws servletexception * @throws ioexception * /public string load (httpservletrequest request, httpservletrepsonge 응답) servletexception, ioexception { / * 1. /jsps/order/desc.jsp */request.setattribute ( "order", Orderservice.load (request.getParameter ( "OID"))로 전달합니다. "f : /jsps/order/desc.jsp"를 반환합니다. } /** * my order * * @param request * @param response * @return * @throws servletexception * @throws ioexception * /public string myorders (httpservletrequest request, httpservletResponse 응답) servletexception, ioexception { / * 1. Orderservice#myorders (UID) 사용자 목록의 모든 주문을 받으려면 <dred> 3. LIST <STRED> ORDERLIST = ORDERSERVICE.MYORDERS (user.getUid ()); request.setAttribute ( "OrderList", OrderList); "f : /jsps/order/list.jsp"를 반환합니다. } /** * 세션에서 차량을 사용하여 주문 객체를 생성하기 위해 주문을 추가하십시오 * @param request * @param response * @return * @throws servletexception * /public string add (httpservletrequest 요청, httpservletResponse 응답, httpservletreponse 응답) servletexception, ioexception { / * 1. 3. 주문을 완료하려면 서비스 방법을 호출합니다. * 주문 필드에 주문을 저장하고/jsps/order/desc.jsp * // 세션에서 카트를 가져옵니다. cart cart = (cart) request.getsession (). getAttribute ( "cart"); // cart를 주문 객체로 변환/ * * 순서 개체를 만들고 속성을 설정하고 속성 * * cart-> order */ order order = new Order (); order.setoid (commonutils.uuid ()); // 숫자 순서를 설정합니다. // 순서 set.setState (1); // 주문 상태를 1로 설정하고 지불이 지불되지 않았 음을 나타냅니다. 사용자) user = (user) request.getSession (). getAttribute ( "session_user"); order.setowner (user); // 주문 소유자 주문을 설정합니다. order.settotal (cart.getTotal ()); // 순서 총계를 설정하고 cart/ *에서 총계를 가져옵니다. // 카트의 모든 CARTITEMS를 통해 각 CARTITEM 객체를 사용하여 OrderItem 객체를 사용하여 (Cartitem Cartitem : Cart.GetCartItems ()) {OrderItem OI = New OrderItem (); 주문 입력 OI.Setiid (commonutils.uuid ()); // set the int (cartit) 항목 수 설정 OI.SetBook (Cartitem.getBook ()); // 책을 설정하여 OI.SETSUBTOTAL ()); // 입력의 하위 토탈을 설정합니다. Order.SetOrderItemList (OrderItemList); // 쇼핑 카트 카트를 지우십시오 .clear (); // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4생 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4생 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4생 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////4생 request.setAttribute ( "Order", Order); "/jsps/order/desc.jsp"를 반환합니다. }}2. 주문을 생성하십시오
3. 내 주문 (사용자가 확인)
4. 순서로드 (ID로 확인)
5. 영수증을 확인하십시오
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.