1、創建相關類
- domain:
- Order
- OrderItem
- dao:OrderDao
- service:OrderService
- web.servlete:OrderServlet
/*** 訂單條目類*/
public class OrderItem {private String iid;
private int count;
private double subtotal;
private Order order;
private Book book;
}
/*** 訂單類*/
public class Order {private String oid;
private Date ordertime;
private double total;
private int state;
private User owner;
private String address;
private List<OrderItem> orderItemList;
}
public class OrderDao {private QueryRunner qr =
new TxQueryRunner();
/*** 添加訂單* @param order*/public void addOrder(Order order) {
try {String sql =
"insert into orders values(?,?,?,?,?,?)";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) {
throw new RuntimeException(e);}}
/*** 插入訂單條目* @param orderItemList*/public void addOrderItemList(List<OrderItem> orderItemList) {
/*** QueryRunner類的batch(String sql, Object[][] params)* 其中params是多個一維數組!* 每個一維數組都與sql在一起執行一次,多個一維數組就執行多次*/try {String sql =
"insert into orderitem values(?,?,?,?,?)";Object[][] params =
new Object[orderItemList.size()][];
for(
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);}
catch(SQLException e) {
throw new RuntimeException(e);}}
/*** 按uid查詢訂單* @param uid* @return*/public List<Order>
findByUid(String uid) {
try {String sql =
"select * from orders where uid=?";List<Order> orderList = qr.query(sql,
new BeanListHandler<Order>(Order.class), uid);
for(Order order : orderList) {loadOrderItems(order);}
return orderList;}
catch(SQLException e) {
throw new RuntimeException(e);}}
/*** 加載指定的訂單所有的訂單條目* @param order* @throws SQLException */private void loadOrderItems(Order order)
throws SQLException {String sql =
"select * from orderitem i, book b where i.bid=b.bid and oid=?";List<Map<String,Object>> mapList = qr.query(sql,
new MapListHandler(), order.getOid());List<OrderItem> orderItemList = toOrderItemList(mapList);order.setOrderItemList(orderItemList);}
/*** 把mapList中每個Map轉換成兩個對象,并建立關系* @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(item);}
return orderItemList;}
/*** 把一個Map轉換成一個OrderItem對象* @param map* @return*/private OrderItem
toOrderItem(Map<String, Object> map) {OrderItem orderItem = CommonUtils.toBean(map, OrderItem.class);Book book = CommonUtils.toBean(map, Book.class);orderItem.setBook(book);
return orderItem;}
/*** 加載訂單* @param oid* @return*/public Order
load(String oid) {
try {String sql =
"select * from orders where oid=?";Order order = qr.query(sql,
new BeanHandler<Order>(Order.class), oid);loadOrderItems(order);
return order;}
catch(SQLException e) {
throw new RuntimeException(e);}}
/*** 通過oid查詢訂單狀態* @param oid* @return*/public int getStateByOid(String oid) {
try {String sql =
"select state from orders where oid=?";
return (Integer)qr.query(sql,
new ScalarHandler(), oid);}
catch(SQLException e) {
throw new RuntimeException(e);}}
/*** 修改訂單狀態* @param oid* @param state* @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);}}
}
public class OrderService {private OrderDao orderDao =
new OrderDao();
/*** 支付方法* @param oid*/public void zhiFu(String oid) {
int state = orderDao.getStateByOid(oid);
if(state ==
1) {orderDao.updateState(oid,
2);}}
/*** 添加訂單* 需要處理事務* @param order*/public void add(Order order) {
try {JdbcUtils.beginTransaction();orderDao.addOrder(order);orderDao.addOrderItemList(order.getOrderItemList());JdbcUtils.commitTransaction();}
catch(Exception e) {
try {JdbcUtils.rollbackTransaction();}
catch (SQLException e1) {}
throw new RuntimeException(e);}}
/*** 我的訂單* @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 confirm(String oid)
throws OrderException {
int state = orderDao.getStateByOid(oid);
if(state !=
3)
throw new OrderException(
"訂單確認失敗,您不是什么好東西!");orderDao.updateState(oid,
4);}
}
public class OrderServlet extends BaseServlet {private OrderService orderService =
new OrderService();
/*** 支付之去銀行* * @param request* @param response* @return* @throws ServletException* @throws IOException*/public String
zhiFu(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {Properties props =
new Properties();InputStream input =
this.getClass().getClassLoader().getResourceAsStream(
"merchantInfo.properties");props.load(input);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";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);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);response.sendRedirect(url.toString());
return null;}
/*** 這個方法是易寶回調方法 我們必須要判斷調用本方法的是不是易寶!* * @param request* @param response* @return* @throws ServletException* @throws IOException*/public String
back(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {String p1_MerId = request.getParameter(
"p1_MerId");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");Properties props =
new Properties();InputStream input =
this.getClass().getClassLoader().getResourceAsStream(
"merchantInfo.properties");props.load(input);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) {request.setAttribute(
"msg",
"您不是什么好東西!");
return "f:/jsps/msg.jsp";}orderService.zhiFu(r6_Order);
if(r9_BType.equals(
"2")) {response.getWriter().print(
"success");}request.setAttribute(
"msg",
"支付成功!等待賣家發貨!你慢慢等~");
return "f:/jsps/msg.jsp";}
/*** 確認收貨* * @param request* @param response* @return* @throws ServletException* @throws IOException*/public String
confirm(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {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, HttpServletResponse response)
throws ServletException, IOException {request.setAttribute(
"order",orderService.load(request.getParameter(
"oid")));
return "f:/jsps/order/desc.jsp";}
/*** 我的訂單* * @param request* @param response* @return* @throws ServletException* @throws IOException*/public String
myOrders(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {User user = (User) request.getSession().getAttribute(
"session_user");List<Order> orderList = orderService.myOrders(user.getUid());request.setAttribute(
"orderList", orderList);
return "f:/jsps/order/list.jsp";}
/*** 添加訂單 把session中的車用來生成Order對象* * @param request* @param response* @return* @throws ServletException* @throws IOException*/public String
add(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {Cart cart = (Cart) request.getSession().getAttribute(
"cart");Order order =
new Order();order.setOid(CommonUtils.uuid());order.setOrdertime(
new Date());order.setState(
1);User user = (User) request.getSession().getAttribute(
"session_user");order.setOwner(user);order.setTotal(cart.getTotal());List<OrderItem> orderItemList =
new ArrayList<OrderItem>();
for (CartItem cartItem : cart.getCartItems()) {OrderItem oi =
new OrderItem();oi.setIid(CommonUtils.uuid());oi.setCount(cartItem.getCount());oi.setBook(cartItem.getBook());oi.setSubtotal(cartItem.getSubtotal());oi.setOrder(order);orderItemList.add(oi);}order.setOrderItemList(orderItemList);cart.clear();orderService.add(order);request.setAttribute(
"order", order);
return "/jsps/order/desc.jsp";}
}
2、生成訂單
3、我的訂單(按用戶查)
4、加載訂單(按id查)
5、確認收貨
總結
以上是生活随笔為你收集整理的图书商城:订单模块的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。