毕业实习项目-11

资源

链接: https://pan.baidu.com/s/1PH9Lq8jlkhGAOcTLYBB24g .
提取码:wlbb

个人中心模块-信息展示

思路

前台:

  1. 新建一个userCenter.jsp文件来动态包含userInfo.jsp(资源已给)
  2. top.jsp中设置用户名链接的路径
  3. userCenter.jsp中修改个人信息管理标签路径
  4. 在userInfo.jsp中动态获取Session中的用户信息

后台:

  1. UserServlet
  2. 存request作用域(pageName,changePage)
  3. 请求转发 userCenter.jsp

实操

1.写 userCenter.jsp文件代码:

userCenter.jsp文件代码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link type="text/css" rel="stylesheet" href="css/style.css" />
	<title>易买网 - ${
    
    pageName }</title>
	</head>
	<body>
		<!-- 头部 -->
		<div id="header" class="wrap">
			<jsp:include page="common/top.jsp" /> 
		</div>
		<div id="position" class="wrap">
			<!-- 文字的导航 -->
			您现在的位置:<a href="index">首页</a>&nbsp;&gt;&nbsp;${
    
    pageName }
		</div>
		<div id="main" class="wrap">
			<div class="lefter">
				<div class="box">
					<dl>
						<dt>用户管理</dt>
						<dd><a href="user?action=userCenter">个人信息管理</a></dd>
						<dt>订单管理</dt>
						<dd><a href="">个人订单管理</a></dd>
					</dl>
				</div>
			</div>
			
		<!-- 动态包含页面 -->
		<jsp:include page="${changePage }"></jsp:include>
		
			<div class="clear"></div>
		</div>
		<div id="footer">
			<jsp:include page="common/footer.jsp" />
		</div>
	</body>
</html>
  1. userInfo.jsp文件代码:

userInfo.jsp文件代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
	<div class="main">
				<h2>用户管理</h2>
				<div class="manage">
					<table class="list">
						<tr>
							<th>ID</th>
							<th>姓名</th>
							<th>性别</th>
							<th>Email</th>
							<th>电话号</th>
							<th>操作</th>
						</tr>
						<tr>
							<td class="first w4 c">${
    
    user.id }</td>
							<td class="w1 c">${
    
    user.trueName }</td>
							<td class="w2 c">${
    
    user.sex }</td>
							<td class="c">${
    
    user.email }</td>
							<td class="w4 c">${
    
    user.mobile }</td>
							<td class="w1 c"><a href="">修改</a></td>
						</tr>
					</table>
				</div>
			</div>
  1. 增加UserServlet.java文件代码

更新UserServlet.java文件代码

...
			}  //checkName报红按CTRL+1,创建一个方法
			
		}else if("userCenter".equals(action)){
    
    
			
			//个人中心
			userCenter(request,response);
			
		}else{
    
    
			response.sendRedirect("index");
		}	
		
	}
	
	/**
	 * 个人中心
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void userCenter(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		//存request作用域(pageName,changePage)
		request.setAttribute("pageName", "个人中心");
		request.setAttribute("changePage", "userCenter/userInfo.jsp");
		//请求转发 userCenter.jsp
		request.getRequestDispatcher("userCenter.jsp").forward(request, response);
	}

	//注册
...

结果

经过以上步骤,我们的个人信息显示小模块就完成啦,通过点击登陆的用户名就可以进入个人信息显示小模块。我用的admin账号登陆:
个人信息
个人信息

个人中心模块-信息修改

思路

前台:

  1. 新建一个userEdit.jsp文件(资源已给);
  2. userInfo.jsp文件中修改 ***“修改”***链接的路径(后台跳转页面)
  3. userEdit.jsp动态获取Session中的用户信息
  4. userCenter.jsp中导入一下日期控件JS,jquery
  5. 给更新按钮绑定更新事件

后台:

  1. UserServlet

  2. 接受参数

  3. 非空判断

  4. 调用service进行更新用户信息,返回受影响行数row;
    判断row是否大于0
    否,提示用户更新失败

  5. 更新session,跳转个人中心页面

实操

  1. 修改userEdit.jsp文件

userEdit.jsp文件相关代码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
			<div class="main">
				<h2>修改用户</h2>
				<div class="manage">
					<form id="userForm" action="user?action=updateUser" method="post">
						<table class="form">
							<tr>
								<td class="field">用户名:</td>
								<td><input type="text" class="text" name="userName" value="${user.userName }" readonly="readonly" /></td>
							</tr>
							<tr>
								<td class="field">姓名:</td>
								<td><input type="text" class="text"  id="trueName" name="trueName" value="${user.trueName }" /></td>
							</tr>
							<tr>
								<td class="field">密码:</td>
								<td><input type="text" class="text" id="password" name="password" value="${user.password }" /></td>
							</tr>
							<tr>
								<td class="field">性别:</td>
								<td>
								<!-- 加一个条件判断 -->
								<c:if test="${user.sex == '男' }">
								
									<input type="radio"  name="sex" value="男" checked/><input type="radio"  name="sex" value="女"/></c:if>
								<c:if test="${user.sex == '女' }">
								
									<input type="radio"  name="sex" value="男" /><input type="radio"  name="sex" value="女" checked/></c:if>
								</td>
							</tr>
							<tr>
								<td class="field">出生日期:</td>
								<td>
									<input  type="text"  id="birthday"  name="birthday" value='<fmt:formatDate pattern="yyyy-MM-dd" value="${user.brithday }"/>'  class="Wdate" onClick="WdatePicker()"/>	
								</td>
							</tr>
							<tr>
								<td class="field">手机号码:</td>
								<td><input type="text" id="mobile" class="text" name="mobile" value="${user.mobile }" /></td>
							</tr>
							<tr>
								<td class="field">送货地址:</td>
								<td><input type="text" class="text"  id="address" name="address" value="${user.address }" /></td>
							</tr>
							<tr>
								<td class="field">身份证号:</td>
								<td><input class="text" type="text" id="dentityCode" name="dentityCode"  value="${user.dentityCode }" /></td>
							</tr>
							<tr>
								<td class="field">Email:</td>
								<td><input class="text" type="text" id="email" name="email"  value="${user.email }" /></td>
							</tr>
							<tr>
								<td></td>
								<td><label class="ui-blue"><input type="button" id="userBtn" value="更新" /></label></td>
							</tr>
							<tr>
								<td>&nbsp;</td>
								<td><font id="error" color="red">${
    
    msg }</font> </td>
							</tr>
						</table>
					</form>
				</div>
			</div>
			
<!-- 给更新按钮绑定更新事件 -->
<script type="text/javascript">

		$("#userBtn").click(function(){
    
    
			
			//接受参数
			var password = $("#password").val();
			var mobile = $("#mobile").val();
			var address = $("#address").val();
			$("#")
	
			//非空判断
			if(password.trim() == ""){
    
    
				$("#error").html("密码不能为空!")
			}
			
			if(mobile.trim() == ""){
    
    
				$("#error").html("手机号不能为空!")
			}
			
			if(address.trim() == ""){
    
    
				$("#error").html("地址不能为空!")
			}
			//提交表单
			$("#userForm").submit();
			
		})
		
</script>

  1. userInfo.jsp文件中修改 ***“修改”***链接的路径

userInfo.jsp文件相关代码

						<tr>
							<td class="first w4 c">${
    
    user.id }</td>
							<td class="w1 c">${
    
    user.trueName }</td>
							<td class="w2 c">${
    
    user.sex }</td>
							<td class="c">${
    
    user.email }</td>
							<td class="w4 c">${
    
    user.mobile }</td>
							
							
							<!--修改 “修改” 链接的路径  -->
							<td class="w1 c"><a href="user?action=userEdit">修改</a></td>
						</tr>
					</table>
				</div>
			</div>
  1. userCenter.jsp中导入一下日期控件JS,jquery
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<link type="text/css" rel="stylesheet" href="css/style.css" />
		
		<!-- 导入一下日期控件JS,jquery -->
		<script type="text/javascript" src="js/My97DatePicker/WdatePicker.js"></script>
		<script type="text/javascript" src="js/jquery-1.11.1.js"></script>
		
	<title>易买网 - ${
    
    pageName }</title>
	</head>
	<body>
  1. 添加UserServlet.java代码

UserServlet.java相关代码

...
else if("userCenter".equals(action)){
    
    
			
			//个人中心
			userCenter(request,response);
			
		}else if("userEdit".equals(action)){
    
    
			
			//修改信息页面
			userEdit(request,response);
			
		}else if("updateUser".equals(action)){
    
    
			
			//更新用户信息
			try {
    
    
				updateUser(request,response);
			} catch (ParseException e) {
    
    
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}else{
    
    
			response.sendRedirect("index");
		}	
		
	}

	/**
	 * 更新用户信息
	 * @param request
	 * @param response
	 * @throws ParseException 
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void updateUser(HttpServletRequest request, HttpServletResponse response) throws ParseException, ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		//接受参数
		String trueName = request.getParameter("trueName");
		String password = request.getParameter("password");
		String sex = request.getParameter("sex");
		String birthdayStr = request.getParameter("birthday");
		Date birthday = null;
		if(StringUtil.isNotEmpty(birthdayStr)){
    
    
			
			//如果用户输入了生日则格式化一下生日参数 
			birthday = new SimpleDateFormat("yyyy-MM-dd").parse(birthdayStr);			
		}
		String dentityCode = request.getParameter("dentityCode");
		String email = request.getParameter("email");
		String mobile = request.getParameter("mobile");
		String address = request.getParameter("address");
		
		//非空判断
		if(StringUtil.isEmpty(password)){
    
    
			
			//空,提示用户
			request.setAttribute("msg", "密码不能为空!");
			userEdit(request,response);
			return;
		}
		
		if(StringUtil.isEmpty(address)){
    
    
			
			//空,提示用户
			request.setAttribute("msg", "地址不能为空!");
			userEdit(request,response);
			return;
		}
		
		if(StringUtil.isEmpty(mobile)){
    
    
			
			//空,提示用户
			request.setAttribute("msg", "手机号不能为空!");
			userEdit(request,response);
			return;
		}

		User u = (User) request.getSession().getAttribute("user");
		Integer id = u.getId();
		//封装数据
		User user = new User(id,address,birthday,dentityCode,email, mobile,password,sex,trueName);//去User.java里生成一下需要的参数构造
		
		//调用service进行更新用户信息,返回受影响行数row;
		int row = userService.updateUser(user);//生成一下updateUser方法 
		
		//判断row是否大于0
		if(row <= 0){
    
    
			
			//否,提示用户更新失败			
			request.setAttribute("msg", "更新失败!");
			userEdit(request,response);
			return;
		}
		 
		//更新session,跳转个人中心页面
		user.setStatus(u.getStatus());
		user.setUserName(u.getUserName());
		request.getSession().setAttribute("user", user);
		userCenter(request,response);
	}

	/**
	 * 修改信息页面
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void userEdit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		//存request作用域(pageName,changePage)
		request.setAttribute("pageName", "修改当前用户");
		request.setAttribute("changePage", "userCenter/userEdit.jsp");
		
		//请求转发 userCenter.jsp
		request.getRequestDispatcher("userCenter.jsp").forward(request, response);
		
	}
...
  1. UserServiceImpl.java文件中添加数据库操作

UserServiceImpl.java文件相关代码

...
	/**
	 * 调用service进行更新用户信息,返回受影响行数row;
	 */
	@Override
	public int updateUser(User user) {
    
    
		// TODO Auto-generated method stub

		int row = 0;
		
		Connection conn = null;
		
		//异常
		try{
    
    
			
		//数据库操作
		//建立连接
		conn = DBUtil.getConnection();
		
		//编写sql语句
		String sql = "update t_user set address=?,birthday=?,dentityCode=?,email=?,mobile=?,password=?,sex=?,trueName=? where id = ?";
		
		//new一个QueryRunner
		QueryRunner qr = new QueryRunner();
		
		//创建参数数组
		Object[] params = {
    
    user.getAddress(),user.getBrithday(),user.getDentityCode(),user.getEmail(),user.getMobile(),user.getPassword(),user.getSex(),user.getTrueName(),user.getId()};
		
		//执行更新
		row = qr.update(conn, sql ,params);
		
		} catch (Exception e){
    
    
			e.printStackTrace();
		}finally{
    
    
			
			//关闭连接
			DBUtil.close(null, null, conn);
		}
		return row;
	}

结果

这样,我们的信息修改模块也完成啦,通过个人信息展示页的修改按钮进入修改界面,再输入需要修改的内容,点击更新就OK了:
信息修改
信息修改
信息修改
数据库里的内容也变啦:
信息修改

个人中心模块-订单展示

思路

前台:

  1. 新建一个userOrder.jsp文件(资源已给)
  2. userCenter.jsp文件中修改个人订单管理链接路径
  3. userOrder.jsp文件中循环遍历显示用户订单信息

后台:

  1. 新建一个OrderServlet
  2. 从session中获取用户Id
  3. 调用service通过用户Id查询订单集合
  4. 存request作用域(订单集合,pageName,changePage)
  5. 请求转发跳转userCenter.jsp

实操

  1. userCenter.jsp文件中修改个人订单管理链接路径

userCenter.jsp文件相关代码

...
						<dt>用户管理</dt>
						<dd><a href="user?action=userCenter">个人信息管理</a></dd>
						
						<-- 修改个人订单管理链接路径 -->
						<dt>订单管理</dt>
						<dd><a href="order?action=userOrder">个人订单管理</a></dd>
					</dl>
				</div>
			</div>
			
		<!-- 动态包含页面 -->
...
  1. userOrder.jsp文件中写代码

userOrder.jsp文件相关代码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
			<div class="main">
				<h2>订单管理</h2>
				<div class="manage">
				<div class="spacer"></div>
				<div class="search">
					<form action="" method="post">
						订单查询:&nbsp;&nbsp;<input  type="text" id="textSearch" name="orderNo" value="" autocomplete="off"/>
						<label class="ui-blue"><input  type="submit" name="submit" value="查询"/></label>
					</form>
				</div>
				<table class="list">
				
				<!--循环遍历显示用户订单信息  -->
				<c:forEach items="${orderList }" var="order">
				
						<tr style="background-color:#F7F4EB">
							<td colspan="4">
								&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
								单号:${
    
    order.orderNo }
								&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
								下单时间:<fmt:formatDate value="${order.createTime }" pattern="yyyy-MM-dd"/>
								&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
								
								状态:<!-- 1待审核 2待发货 3确认收货 4交易完毕 -->
								<c:choose>
								
									<c:when test="${order.status == 1 }">
										待审核
									</c:when>
									
									<c:when test="${order.status == 2 }">
										待发货
									</c:when>
									
									<c:when test="${order.status == 3 }">
										<input type="button" class="ui-blue" value="确认收货" onclick="confirmReceive()"/>
									</c:when>
									
									<c:when test="${order.status == 4 }">
										交易完毕 
									</c:when>
									
								</c:choose>
								&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
								金额:${
    
    order.cost }&nbsp; ()
							</td>
						</tr>
						
						<!--嵌套循环显示商品信息  -->
						<c:forEach items="${order.orderProductList }" var="orderProduct">
						<tr>
							<td width="55%">
								<a href="product?id=${orderProduct.productId }">
									<img src="${orderProduct.product.proPic }" width="70" height="70" />
								</a>
								&nbsp;&nbsp;&nbsp;
								<a href="${orderProduct.productId }">
									${
    
    orderProduct.product.name }
								</a>
							</td>
							<td width="15%">
								&nbsp;&nbsp;&nbsp;
								${
    
    orderProduct.product.price }()
							</td>
							<td width="15%">
								&nbsp;&nbsp;&nbsp;
								${
    
    orderProduct.num }
							</td>
							<td width="15%">
								&nbsp;&nbsp;&nbsp;小计:
								${
    
    orderProduct.num*orderProduct.product.price }&nbsp;()
							</td>
						</tr>
						
						</c:forEach>					  
						
				</c:forEach>
				
				</table>
				</div>
			</div>
	<script type="text/javascript">
		function confirmReceive(){
    
    
			if(confirm("确定收货?")){
    
    
				window.location.reload();
			}
		}
	</script>
  1. OrderServlet.java文件中添加代码

OrderServlet.java文件代码

...
/**
 * 订单
 * Servlet implementation class OrderServlet
 */
@WebServlet("/order")
public class OrderServlet extends HttpServlet {
    
    
	private static final long serialVersionUID = 1L;

	//OrderService生成一个接口放在Service包下;OrderServiceImpl生成一个类放在impl包下
	private OrderService orderService = new OrderServiceImpl();
	
	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		String action = request.getParameter("action");
		if("userOrder".equals(action)){
    
    
			//个人订单展示
			userOrder(request,response);
			
		}
	}

	/**
	 * 个人订单展示
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void userOrder(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		//从session中获取用户Id
		User user = (User) request.getSession().getAttribute("user");
		Integer userId = user.getId();
		
		//调用service通过用户Id查询订单集合
		List<Order> orderList = orderService.findOrderListByUserId(userId);//Order报红新建一个Order.java文件在po包下作为OrderBean
		
		//存request作用域(订单集合,pageName,changePage)
		request.setAttribute("orderList", orderList);
		request.setAttribute("pageName", "个人中心");
		request.setAttribute("changePage", "userCenter/userOrder.jsp");
		
		//请求转发跳转userCenter.jsp
		request.getRequestDispatcher("userCenter.jsp").forward(request, response);
	}

}

  1. Order.java文件添加代码

Order.java文件代码

...
/**
 * 订单Bean
 * @author yu
 *
 */
public class Order {
    
    
	
	private Integer id;			//主键Id
	private float cost;			//订单总价
	private Date createTime;	//创建时间
	private String orderNo;		//订单编号
	private Integer status; 	//订单状态 1:待审核  2:待发货  3:确认收获  4:交易完毕
	private Integer userId;		//用户Id
	
	private List<OrderProduct> orderProductList;
	
	//敲完以上三行代码可以使用ALT+SHIFT+S组合键;
	//选择Generate Getters and Setters...
	//选择Select all;ok后即可自动生成下面的Get、Set方法代码
	
	public List<OrderProduct> getOrderProductList() {
    
    
		return orderProductList;
	}
	public void setOrderProductList(List<OrderProduct> orderProductList) {
    
    
		this.orderProductList = orderProductList;
	}
	public Integer getId() {
    
    
		return id;
	}
	public void setId(Integer id) {
    
    
		this.id = id;
	}
	public float getCost() {
    
    
		return cost;
	}
	public void setCost(float cost) {
    
    
		this.cost = cost;
	}
	public Date getCreateTime() {
    
    
		return createTime;
	}
	public void setCreateTime(Date createTime) {
    
    
		this.createTime = createTime;
	}
	public String getOrderNo() {
    
    
		return orderNo;
	}
	public void setOrderNo(String orderNo) {
    
    
		this.orderNo = orderNo;
	}
	public Integer getStatus() {
    
    
		return status;
	}
	public void setStatus(Integer status) {
    
    
		this.status = status;
	}
	public Integer getUserId() {
    
    
		return userId;
	}
	public void setUserId(Integer userId) {
    
    
		this.userId = userId;
	}
}
  1. OrderServiceImpl.java文件中添加代码

OrderServiceImpl.java文件代码

...
public class OrderServiceImpl implements OrderService {
    
    

	//OrderProductService生成一个接口放在Service包下;OrderProductServiceImpl生成一个类放在impl包下
	private OrderProductService orderProductService = new OrderProductServiceImpl();
	
	/**
	 * 调用service通过用户Id查询订单集合
	 */
	@Override
	public List<Order> findOrderListByUserId(Integer userId) {
    
    
		// TODO Auto-generated method stub

		//new一个list
		List<Order> orderList = null;
		
		Connection conn = null;
		
		//异常
		try{
    
    
			
		//数据库操作
		//建立连接
		conn = DBUtil.getConnection();
		
		//编写sql语句
		String sql = "select * from t_order where userId = ?";
		
		//new一个QueryRunner
		QueryRunner qr = new QueryRunner();
		
		Object[] params = {
    
    userId};
		
		//执行查询,得到商品集合,再放入orderList中

		orderList = qr.query(conn, sql ,new BeanListHandler<>(Order.class),params);
		
		//通过orderId查询orderList集合
		for (Order order : orderList) {
    
    
			
			//生成一下OrderProduct类作为OrderProductBean放在po包下;生成一下findOrderProductListByOrderId方法
			List<OrderProduct> orderProductList = orderProductService.findOrderProductListByOrderId(order.getId());
			order.setOrderProductList(orderProductList);
		}
		
		} catch (Exception e){
    
    
			e.printStackTrace();
		}finally{
    
    
			
			//关闭连接
			DBUtil.close(null, null, conn);
		}
		return orderList;
		
	}

}
...
  1. OrderProduct.java文件中添加代码

OrderProduct.java文件代码

...
/**
 * 订单商品Bean
 * @author yu
 *
 */
public class OrderProduct {
    
    

	private Integer id; 		//主键Id
	private Integer num;		//订单对应的商品数量
	private Integer orderId;	//订单Id
	private Integer productId;	//商品Id
	
	private Product product;
	
	
	
	public Product getProduct() {
    
    
		return product;
	}
	public void setProduct(Product product) {
    
    
		this.product = product;
	}
	public Integer getId() {
    
    
		return id;
	}
	public void setId(Integer id) {
    
    
		this.id = id;
	}
	public Integer getNum() {
    
    
		return num;
	}
	public void setNum(Integer num) {
    
    
		this.num = num;
	}
	public Integer getOrderId() {
    
    
		return orderId;
	}
	public void setOrderId(Integer orderId) {
    
    
		this.orderId = orderId;
	}
	public Integer getProductId() {
    
    
		return productId;
	}
	public void setProductId(Integer productId) {
    
    
		this.productId = productId;
	}	
}
...
  1. OrderProductServiceImpl.java文件修改代码

OrderProductServiceImpl.java文件代码

...
public class OrderProductServiceImpl implements OrderProductService {
    
    

	private ProductService productService = new ProductServiceImpl();
	/**
	 * 
	 */
	@Override
	public List<OrderProduct> findOrderProductListByOrderId(Integer orderId) {
    
    
		// TODO Auto-generated method stub

		//new一个list
		List<OrderProduct> orderProductList = null;
		
		Connection conn = null;
		
		//异常
		try{
    
    
			
		//数据库操作
		//建立连接
		conn = DBUtil.getConnection();
		
		//编写sql语句
		String sql = "select * from t_order_product where orderId = ?";
		
		//new一个QueryRunner
		QueryRunner qr = new QueryRunner();
		
		Object[] params = {
    
    orderId};
		
		//执行查询,得到商品集合,再放入orderList中

		orderProductList = qr.query(conn, sql ,new BeanListHandler<>(OrderProduct.class),params);
		
		//通过productId查询Product
		for (OrderProduct orderProduct : orderProductList) {
    
    
			
			Product product= productService.findProductById(orderProduct.getProductId());
			orderProduct.setProduct(product);
		}
		
		} catch (Exception e){
    
    
			e.printStackTrace();
		}finally{
    
    
			
			//关闭连接
			DBUtil.close(null, null, conn);
		}
		return orderProductList;
	}
}
...

结果

经过以上步骤,这个小模块也就完成啦,因为涉及到表的连查,所以这个模块涉及的文件和代码相较其它模块多一些。成功的数据依旧是来源于数据库admin用户的个人订单:
订单展示

个人中心模块-确认收货&订单查询

思路

前台:

一、确认收获:

  1. userOrder.jsp文件中给确认收货按钮绑定点击事件(传入订单ID)
  2. Ajax访问后台,返回结果给回调函数
  3. 判断结果,1:刷新页面;0:提示用户失败

二、订单搜索

  1. userOrder.jsp文件中设置表单提交路径

后台:

一、确认收获:

  1. OrderServlet
  2. 接收参数
  3. 调用service通过Id修改订单状态,返回受影响行数row
    row <=0 返回0 否则 返回1

二、订单搜索:

  1. 接收参数
  2. 非空判断
    空,查询所有
    不为空,调用service通过订单编号模糊查询订单集合
    非空判断
    空,提示用户没有记录
  3. 存作用域(订单集合,pageName,changePage)
  4. 请求转发跳转userCenter.jsp

实操

  1. userOrder.jsp文件修改代码

userOrder.jsp文件代码

...
				<h2>订单管理</h2>
				<div class="manage">
				<div class="spacer"></div>
				<div class="search">
				
				<!--订单查询 设置表单提交路径  -->
					<form action="order?action=searchOrderNo" method="post">
						订单查询:&nbsp;&nbsp;<input  type="text" id="textSearch" name="orderNo" value="${msg }" autocomplete="off"/>
						<label class="ui-blue"><input  type="submit" name="submit" value="查询"/></label>
					</form>
				</div>
				<table class="list">
...
...
...
									<c:when test="${order.status == 2 }">
										待发货
									</c:when>
									
									<c:when test="${order.status == 3 }">
									
									<-- 确认收货按钮绑定点击事件 -->
										<input type="button" class="ui-blue" value="确认收货" onclick="confirmReceive(${order.id })"/>
									</c:when>
									
									<c:when test="${order.status == 4 }">
										交易完毕 
									</c:when>
...
...
...
							<td width="15%">
								&nbsp;&nbsp;&nbsp;小计:
								${
    
    orderProduct.num*orderProduct.product.price }&nbsp;()
							</td>
						</tr>
						
						</c:forEach>					  
						
				</c:forEach>
				
				</table>
				</div>
			</div>
	<script type="text/javascript">
		function confirmReceive(orderId){
    
    
			if(confirm("确定收货?")){
    
    
			 //Ajax访问后台,返回结果给回调函数
				$.ajax({
    
    
					type:"post",
					url:"order",
					data:{
    
    
						"action":"confirmReceive",
						"orderId":orderId
					},
					success:function(result){
    
    
						if(result == 0){
    
    
							alert("网络异常!");
						}else{
    
    
							window.location.reload();	
						}
					}
				});
			}
		}
	</script>
...
  1. OrderServlet.java文件修改代码

OrderServlet.java文件代码

...			
}else if("confirmReceive".equals(action)){
    
    
			
			//确认收货
			confirmReceive(request,response);
			
		}else if("searchOrderNo".equals(action)){
    
    
			
			//订单查询
			searchOrderNo(request,response);
		}
	}

	/**
	 * 订单查询:
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void searchOrderNo(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
		// TODO Auto-generated method stub
		
		//接收参数
		String orderNo = request.getParameter("orderNo");
		
		//非空判断
		if(StringUtil.isEmpty(orderNo)){
    
    
			
			//空,查询所有
			userOrder(request,response);
		}
		
		User user = (User) request.getSession().getAttribute("user");
		
		//不为空,调用service通过订单编号模糊查询订单集合
		List<Order> list = orderService.findOrderListByOrderNo(orderNo,user.getId());
		
		//非空判断
		if(list == null){
    
    
			
			//空,提示用户没有记录
			request.setAttribute("msg", "暂未查询到订单");
		}
		
		//存作用域(订单集合,pageName,changePage)
		request.setAttribute("orderList", list);
		request.setAttribute("pageName", "个人中心");
		request.setAttribute("changePage", "userCenter/userOrder.jsp");
		
		//请求转发跳转userCenter.jsp
		request.getRequestDispatcher("userCenter.jsp").forward(request, response);
	}

	/**
	 * 确认收货
	 * @param request
	 * @param response
	 * @throws IOException 
	 */
	private void confirmReceive(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
    
		// TODO Auto-generated method stub
		
		//接收参数 id
		String orderId = request.getParameter("orderId");
		if(StringUtil.isEmpty(orderId)){
    
    
			response.getWriter().write("0");
			return;
		}
		
		//调用service通过Id修改订单状态,返回受影响行数row
		int row = orderService.confirmReceive(Integer.parseInt(orderId));
		
		//row <=0 返回0 
		if(row <= 0){
    
    
			response.getWriter().write("0");
			return;	
		}
		
		//否则 返回1
		response.getWriter().write("1");
	}

...
  1. OrderServiceImpl.java文件修改代码

OrderServiceImpl.java文件代码

...
	/**
	 * 通过Id修改订单状态
	 */
	@Override
	public int confirmReceive(int orderId) {
    
    
		// TODO Auto-generated method stub

		int row = 0;
		
		Connection conn = null;
		
		//异常
		try{
    
    
			
		//数据库操作
		//建立连接
		conn = DBUtil.getConnection();
		
		//编写sql语句
		String sql = "update t_order set status = 4 where id = ?";
		
		//new一个QueryRunner
		QueryRunner qr = new QueryRunner();
		
		//创建参数数组
		Object[] params = {
    
    orderId};
		
		//执行更新
		row = qr.update(conn, sql ,params);
		
		} catch (Exception e){
    
    
			e.printStackTrace();
		}finally{
    
    
			
			//关闭连接
			DBUtil.close(null, null, conn);
		}
		return row;
	}
	
	/**
	 * 通过订单编号模糊查询订单集合
	 */
	@Override
	public List<Order> findOrderListByOrderNo(String orderNo, Integer userId) {
    
    
		// TODO Auto-generated method stub
		
		//new一个list
		List<Order> orderList = null;
		
		Connection conn = null;
		
		//异常
		try{
    
    
			
		//数据库操作
		//建立连接
		conn = DBUtil.getConnection();
		
		//编写sql语句
		String sql = "select * from t_order where userId = ? and orderNo like ?";
		
		//new一个QueryRunner
		QueryRunner qr = new QueryRunner();
		
		Object[] params = {
    
    userId,"%"+orderNo+"%"};
		
		//执行查询,得到商品集合,再放入orderList中

		orderList = qr.query(conn, sql ,new BeanListHandler<>(Order.class),params);
		
		//通过orderId查询orderList集合
		for (Order order : orderList) {
    
    
			
			//生成一下OrderProduct类作为OrderProductBean放在po包下;生成一下findOrderProductListByOrderId方法
			List<OrderProduct> orderProductList = orderProductService.findOrderProductListByOrderId(order.getId());
			order.setOrderProductList(orderProductList);
		}
		
		} catch (Exception e){
    
    
			e.printStackTrace();
		}finally{
    
    
			
			//关闭连接
			DBUtil.close(null, null, conn);
		}
		return orderList;
	}

结果

做完了这个小模块,个人中心大模块就做完了,贴出成功图:
确认收货
第一个和第二个商品点击确认收货:
确认收货2
第一个和第二个商品状态变化:
确认收货3
数据库红框内有两条目状态变为4(点击确认收货后交易完成)
在这里插入图片描述
栏内搜索第一个订单的单号后四位5348,只显示第一条订单:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42347543/article/details/114264828