您的位置:首页 > 其它

网上图书商城项目学习笔记-018生成订单

2016-01-30 16:04 169 查看
一、流程分析

1.订单模块介绍



2.生成订单流程



二、代码

1.view层

(1)showitem.jsp

<form id="form1" action="<c:url value='/OrderServlet'/>" method="post">
<input type="hidden" name="cartItemIds" value="${cartItemIds }"/>
<input type="hidden" name="method" value="createOrder"/>
<table width="95%" align="center" cellpadding="0" cellspacing="0">
<tr bgcolor="#efeae5">
<td width="400px" colspan="5"><span style="font-weight: 900;">生成订单</span></td>
</tr>
<tr align="center">
<td width="10%"> </td>
<td width="50%">图书名称</td>
<td>单价</td>
<td>数量</td>
<td>小计</td>
</tr>

<c:forEach items="${items }" var="item">
<tr align="center">
<td align="right">
<a class="linkImage" href="<c:url value='/jsps/book/desc.jsp'/>"><img border="0" width="54" align="top" src="<c:url value='${item.book.image_b }'/>"/></a>
</td>
<td align="left">
<a href="<c:url value='/jsps/book/desc.jsp'/>"><span>${item.book.bname }</span></a>
</td>
<td>¥${item.book.currPrice }</td>
<td>${item.quantity }</td>
<td>
<span class="price_n">¥<span class="subtotal">${item.subtotal }</span></span>
</td>
</tr>
</c:forEach>

<tr>
<td colspan="6" align="right">
<span>总计:</span><span class="price_t">¥<span id="total">${total }</span></span>
</td>
</tr>
<tr>
<td colspan="5" bgcolor="#efeae5"><span style="font-weight: 900">收货地址</span></td>
</tr>
<tr>
<td colspan="6">
<input id="addr" type="text" name="address" value="北京市 昌平区 西三旗 金燕龙办公楼1层 传智播客 张三爷"/>
</td>
</tr>
<tr>
<td style="border-top-width: 4px;" colspan="5" align="right">
<a id="linkSubmit" href="javascript:$('#form1').submit();">提交订单</a>
</td>
</tr>
</table>
</form>


(2)ordersucc.js

<div class="div2">
<img src="<c:url value='/images/duihao.jpg'/>" class="img"/>
<dl>
<dt>订单编号</dt>
<dd>${order.oid }</dd>
<dt>合计金额</dt>
<dd><span class="price_t">¥${order.total }</span></dd>
<dt>收货地址</dt>
<dd>${order.address }</dd>
</dl>
<span>ITCAST书城感谢您的支持,祝您购物愉快!</span>
<a href="<c:url value='/jsps/order/pay.jsp'/>" id="linkPay">支付</a>
</div>


2.servlet层

(1)OrderServlet.java

/**
* 生成订单
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String createOrder(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 1. 获取所有购物车条目的id,查询之
String ids = req.getParameter("cartItemIds");
List<CartItem> cartItems = itemService.loadCartItems(ids);
if(cartItems.size() == 0) {
req.setAttribute("code", "error");
req.setAttribute("msg", "您没有选择要购买的图书,不能下单!");
return "f:/jsps/msg.jsp";
}

// 2. 创建Order
Order order = new Order();
order.setOid(CommonUtils.uuid());
order.setOrderTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
order.setStatus(1);
order.setAddress(req.getParameter("address"));
User user = (User) req.getSession().getAttribute("sessionUser");
order.setUser(user);

//设置total
BigDecimal total = new BigDecimal("0");
for(CartItem item : cartItems) {
total = total.add(item.getSubtotal());
}
order.setTotal(total);

//设置订单对应的orderItems
List<OrderItem> orderItems = toOrderItemList(cartItems, order);
order.setOrderItems(orderItems);

service.createOrder(order);
itemService.batchDelete(ids);    // 删除购物车条目

req.setAttribute("order", order);
return "/jsps/order/ordersucc.jsp";
}

private List<OrderItem> toOrderItemList(List<CartItem> cartItems, Order order) {
if(cartItems == null || cartItems.size() == 0) return null;
List<OrderItem> orderItems = new ArrayList<OrderItem>();
OrderItem orderItem = null;
for(CartItem cartItem : cartItems){
orderItem = toOrderItem(cartItem);
orderItem.setOrder(order);
orderItems.add(orderItem);
}
return orderItems;
}

private OrderItem toOrderItem(CartItem cartItem) {
OrderItem orderItem = new OrderItem();
orderItem.setOrderItemId(CommonUtils.uuid());
orderItem.setQuantity(cartItem.getQuantity());
orderItem.setSubtotal(cartItem.getSubtotal());
orderItem.setBook(cartItem.getBook());
return orderItem;
}


3.service层

(1)OrderService.java

/**
* 生成订单
* @param order
*/
public void createOrder(Order order) {
try {
JdbcUtils.beginTransaction();
dao.add(order);
JdbcUtils.commitTransaction();
} catch (SQLException e) {
try {
JdbcUtils.rollbackTransaction();
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
}


4.dao层

(1)OrderDao.java

/**
* 生成订单
* @param order
* @throws SQLException
*/
public void add(Order order) throws SQLException {
/*
* 1. 插入订单
*/
String sql = "insert into t_order values (?,?,?,?,?,?)";
Object [] params = {order.getOid(), order.getOrderTime(), order.getTotal(), order.getStatus(), order.getAddress(), order.getUser().getUid()};
qr.update(sql, params);

/*
* 2. 循环遍历订单的所有条目,让每个条目生成一个Object[]
* 多个条目就对应Object[][]
* 执行批处理,完成插入订单条目
*/
sql = "insert into t_orderItem values (?,?,?,?,?,?,?,?)";
List<OrderItem> items = order.getOrderItems();
int len = items.size();
Object [][] params2 = new Object[len][];
OrderItem item = null;
Book book = null;
for(int i=0 ; i<len ; i++) {
item = items.get(i);
book = item.getBook();
params2[i] = new Object[]{item.getOrderItemId(), item.getQuantity(), item.getSubtotal(),book.getBid(),
book.getBname(), book.getCurrPrice(), book.getImage_b(), item.getOrder().getOid()};
}
qr.batch(sql, params2);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: