学习过程:
确认订单后就可以前台可以查看订单,后台也可以处理订单了,我们先完成前台的订单查询
一、前台订单查询
1、前台订单查询的dao实现,为OrderDao添加方法,新点击的订单默认是没有处理的状态。
/**
*
* @param memeberId 用户Id
* @param page
* @return
*/
public List<Order> getOrdersByMemberId(int memeberId, Page page) {
OrderDetailDao orderDetailDao=new OrderDetailDao();
List<Order> orders = new ArrayList<Order>();
try {
getCon();
String sqlcount = "select count(*) from orders where member_id=?";
rs = exeQuery(sqlcount, new Object[] { memeberId });
if (rs.next()) {
page.setItmeCount(rs.getInt(1));
}
String sql = "select * from orders where member_id=? limit ?,?";
rs = exeQuery(sql, new Object[] { memeberId, page.getItemStart(),
page.getPageSize() });
while (rs.next()) {
Order order=new Order();
order.setAddr(rs.getString("addr"));
order.setCountcash(rs.getDouble("countcash"));
order.setMemberId(rs.getInt("member_id"));
order.setOrderId(rs.getInt("order_id"));
order.setOrderTime(rs.getTimestamp("order_time"));
order.setPhone(rs.getString("phone"));
order.setRealName(rs.getString("real_name"));
order.setStatus(rs.getInt("status"));
//把订单详情查询出来
List<OrderDetail> orderDetails=orderDetailDao.getDetailByOrderId(order.getOrderId());
order.setOrderDetails(orderDetails);
orders.add(order);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return orders;
}
/**
* 后台根据订单状态查询
*
* @param status
* 订单状态
* @param page
* 分页信息
* @return
*/
public List<Order> getOrderByStatus(int status, Page page) {
OrderDetailDao orderDetailDao = new OrderDetailDao();
List<Order> orders = new ArrayList<Order>();
try {
getCon();
String sqlcount = "select count(*) from orders where status=?";
rs = exeQuery(sqlcount, new Object[] { status });
if (rs.next()) {
page.setItmeCount(rs.getInt(1));
}
String sql = "select * from orders where status=? order by status limit ?,? ";
rs = exeQuery(
sql,
new Object[] { status, page.getItemStart(),
page.getPageSize() });
while (rs.next()) {
Order order = new Order();
order.setAddr(rs.getString("addr"));
order.setCountcash(rs.getDouble("countcash"));
order.setMemberId(rs.getInt("member_id"));
order.setOrderId(rs.getInt("order_id"));
order.setOrderTime(rs.getTimestamp("order_time"));
order.setPhone(rs.getString("phone"));
order.setRealName(rs.getString("real_name"));
order.setStatus(rs.getInt("status"));
// 把订单详情查询出来
List<OrderDetail> orderDetails = orderDetailDao
.getDetailByOrderId(order.getOrderId());
order.setOrderDetails(orderDetails);
orders.add(order);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
closeAll();
}
return orders;
}
/**
* 根据订单Id查询,已经把该订单的详情页查询出来了。
*
* @param id
* @return
*/
public Order getOrderById(int id) {
OrderDetailDao orderDetailDao = new OrderDetailDao();
Order order = null;
try {
getCon();
String sql = "select * from orders where order_id=? ";
rs = exeQuery(sql, new Object[] { id });
if (rs.next()) {
order = new Order();
order.setAddr(rs.getString("addr"));
order.setCountcash(rs.getDouble("countcash"));
order.setMemberId(rs.getInt("member_id"));
order.setOrderId(rs.getInt("order_id"));
order.setOrderTime(rs.getTimestamp("order_time"));
order.setPhone(rs.getString("phone"));
order.setRealName(rs.getString("real_name"));
order.setStatus(rs.getInt("status"));
// 把订单详情查询出来
List<OrderDetail> orderDetails = orderDetailDao
.getDetailByOrderId(order.getOrderId());
order.setOrderDetails(orderDetails);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
closeAll();
}
return order;
}
public int updateOrderStatus(int orderId, int status) {
int result = 0;
getCon();
String sql="update orders set status=? where order_id=?";
result=exeUpdate(sql, new Object[]{status,orderId});
closeAll();
return result;
}
2、修改订单处理的servlet代码。
else if (ope.equals("list")) {
Member member = (Member) session.getAttribute("member");
List<GoodsTypes> goodsTypeses=goodsTypesDao.getAllTypes();
int currentPage=1;
String cpage=request.getParameter("cpage");
if(cpage!=null){
currentPage=Integer.parseInt(cpage);
}
Page page=new Page();
page.setCurrentPage(currentPage);
page.setPageSize(10);
List<Order> orders=orderDao.getOrdersByMemberId(member.getMemberId(), page);
request.setAttribute("page", page);
request.setAttribute("orders", orders);
request.setAttribute("goodsTypeses", goodsTypeses);
// 查询用户的所有的订单信息
request.getRequestDispatcher("orderlist.jsp").forward(request,
response);
}
3、修改页面
<!-- content -->
<div id="manage_content_wrapper">
<div id="manage_content_left">
<jsp:include page="left.jsp"></jsp:include>
</div>
<div id="manage_content_right">
<div id="admin_content_contain">
<form action="OrderAdminServlet">
<select name="status">
<option value="1" <c:if test="${status==1 }">selected="selected"</c:if>>没有处理</option>
<option value="2" <c:if test="${status==2 }">selected="selected"</c:if>>已查看</option>
<option value="3" <c:if test="${status==3 }">selected="selected"</c:if>>已发送</option>
<option value="4" <c:if test="${status==4 }">selected="selected"</c:if>>交易成功</option>
<option value="5" <c:if test="${status==5 }">selected="selected"</c:if>>交易失败</option>
</select> <input type="submit" value="查找" />
</form>
<table width="859" border="0" cellspacing="1" bgcolor="#e8822e">
<tr class="admin_font3">
<td width="57" height="30">序号</td>
<td width="98">客户姓名</td>
<td width="90">下单时间</td>
<td width="171">送货地址</td>
<td width="161">联系方式</td>
<td width="96">总金额</td>
<td width="65">状态</td>
<td width="69">操作</td>
</tr>
<c:forEach items="${orders }" var="order" varStatus="status">
<tr class="admin_font2">
<td height="25">${status.index+1 }</td>
<td>${order.realName }</td>
<td>${order.orderTime }</td>
<td>${order.addr }</td>
<td>${order.phone }</td>
<td>${order.countcash}</td>
<td><c:choose>
<c:when test="${ order.status eq 1}">没有处理</c:when>
<c:when test="${ order.status eq 2}">已查看</c:when>
<c:when test="${ order.status eq 3}">已发送</c:when>
<c:when test="${ order.status eq 4}">交易成功</c:when>
<c:otherwise>交易失败</c:otherwise>
</c:choose>
</td>
<td><a
href="OrderAdminServlet?ope=detaillist&oid=${order.orderId }">
查看详情</a>
</td>
</tr>
</c:forEach>
</table>
</div>
</div>
<div align="center">
第${page.currentPage }页,共有 ${page.pageCount } 页 <a
href="OrderAdminServlet?status=${status }&cpage=${page.currentPage-1}">上一页</a>
<a
href="OrderAdminServlet?status=${status }&cpage=${page.currentPage+1}">下一页</a>
</div>
</div>
<!-- end of content -->
js代码实现:
二、后台订单处理
后台需要完成订单查询,并能够根据订单状态查询,然后处理订单
点击查看详情后就可以处理订单了。
下面是代码的实现:
1、OrderDetailDao类,点击一个方法
public class OrderDetailDao extends BaseDao{
/**
* 根据订单Id获得订单详情
* @param orderId
* @return
*/
public List<OrderDetail> getDetailByOrderId(int orderId){
GoodsDao goodsDao=new GoodsDao();
List<OrderDetail> orderDetails=new ArrayList<OrderDetail>();
getCon();
String sql="select * from order_detail where order_id=?";
rs=exeQuery(sql, new Object[]{orderId});
try {
while(rs.next()){
OrderDetail orderDetail=new OrderDetail();
orderDetail.setCash(rs.getDouble("cash"));
orderDetail.setDetailId(rs.getInt("detail_Id"));
orderDetail.setGoodsId(rs.getInt("goods_id"));
orderDetail.setNums(rs.getInt("nums"));
//查询对应的商品信息
Goods goods=goodsDao.getById(orderDetail.getGoodsId());
orderDetail.setGoods(goods);
orderDetails.add(orderDetail);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
closeAll();
}
return orderDetails;
}
public static void main(String[] args) {
OrderDetailDao orderDetailDao=new OrderDetailDao();
List<OrderDetail> orderDetails=orderDetailDao.getDetailByOrderId(5);
System.out.println(orderDetails.size());
}
}
2、servlet实现
public class OrderAdminServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
OrderDao orderDao = new OrderDao();
OrderDetailDao orderDetailDao = new OrderDetailDao();
MemberDao memberDao=new MemberDao();
String ope = request.getParameter("ope");
if (ope == null || ope.equals("orderlist")) {
int currentPage = 1;// 当前页
int status = Order.NOT;// 订单状态
// 获得用户指定的当前页和订单状态
String cpage = request.getParameter("cpage");
String sta = request.getParameter("status");
if (cpage != null) {
currentPage = Integer.parseInt(cpage);
}
if (sta != null) {
status = Integer.parseInt(sta);
}
// 分页信息
Page page = new Page();
page.setCurrentPage(currentPage);
// 查询数据库
List<Order> orders = orderDao.getOrderByStatus(status, page);
request.setAttribute("status", status);
request.setAttribute("orders", orders);
request.setAttribute("page", page);
request.getRequestDispatcher("orderlist.jsp").forward(request,
response);
} else if (ope.equals("detaillist")) {
int orderId = Integer.parseInt(request.getParameter("oid"));
Order order = orderDao.getOrderById(orderId);
request.setAttribute("order", order);
request.getRequestDispatcher("orderdeal.jsp").forward(request,
response);
} else if (ope.equals("deal")) {
int orderId = Integer.parseInt(request.getParameter("orderId"));
int status = Integer.parseInt(request.getParameter("status"));
int result=orderDao.updateOrderStatus(orderId, status);
if(status==Order.SENDED){
//获得用户的邮箱,
//发送邮件
}
if (result>0) {
//修改成功
response.sendRedirect("OrderAdminServlet");
}else{
response.sendRedirect("error.jsp");
}
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}