Initial commit
This commit is contained in:
15
src/c3p0-config.xml
Normal file
15
src/c3p0-config.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<c3p0-config>
|
||||
<default-config>
|
||||
<property name="driverClass">com.mysql.jdbc.Driver</property>
|
||||
<property name="jdbcUrl">jdbc:mysql://bj-cynosdbmysql-grp-68yeo4fq.sql.tencentcdb.com:29208/shopping?useSSL=true&characterEncoding=UTF-8</property>
|
||||
<property name="user">mysql</property>
|
||||
<property name="password">MYSQLmysql123</property>
|
||||
<property name="checkoutTimeout">30000</property>
|
||||
<property name="initialPoolSize">10</property>
|
||||
<property name="maxIdleTime">30</property>
|
||||
<property name="maxPoolSize">100</property>
|
||||
<property name="minPoolSize">10</property>
|
||||
</default-config>
|
||||
|
||||
</c3p0-config>
|
26
src/com/qf/controller/AddressController.java
Normal file
26
src/com/qf/controller/AddressController.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import com.qf.service.CartService;
|
||||
import com.qf.service.impl.CartServiceImpl;
|
||||
import com.qf.utils.Constants;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.sql.SQLException;
|
||||
|
||||
@WebServlet("/address")
|
||||
public class AddressController extends BaseServlet {
|
||||
|
||||
public String show(HttpServletRequest request, HttpServletResponse response){
|
||||
|
||||
//1.获取请求参数
|
||||
|
||||
//2.调用对应的业务逻辑 清空购物车
|
||||
|
||||
//3.转发到展示方法中
|
||||
return Constants.FORWARD + "/cart?method=show";
|
||||
}
|
||||
|
||||
|
||||
}
|
73
src/com/qf/controller/BaseServlet.java
Normal file
73
src/com/qf/controller/BaseServlet.java
Normal file
@@ -0,0 +1,73 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import com.qf.utils.Constants;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class BaseServlet extends HttpServlet {
|
||||
//重写service方法,来处理反射的业务逻辑
|
||||
@Override
|
||||
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
|
||||
req.setCharacterEncoding("utf-8");
|
||||
|
||||
|
||||
//1.获取请求参数(标识符)
|
||||
String methodStr =req.getParameter(Constants.TAG);
|
||||
//我们在这做一个处理。2.如果method没有获取到值!我们就跳转到首页!(标识符异常处理)
|
||||
if (methodStr==null&& methodStr.equals("")){
|
||||
methodStr= Constants.INDEX;
|
||||
}
|
||||
|
||||
|
||||
//3.反射调用对应的业务逻辑方法
|
||||
Class clazz=this.getClass();
|
||||
try {
|
||||
Method method=clazz.getMethod(methodStr, HttpServletRequest.class, HttpServletResponse.class);
|
||||
Object result= method.invoke(this,req,resp);
|
||||
|
||||
//4.集中处理返回值响应
|
||||
if (result != null) {
|
||||
//转发 重定向 返回字符串
|
||||
String str=(String)result;
|
||||
if (str.startsWith(Constants.FORWARD)){
|
||||
//转发 截取
|
||||
String path= str.substring(str.indexOf(Constants.FLAG)+1);
|
||||
req.getRequestDispatcher(path).forward(req,resp);
|
||||
}else if (str.startsWith(Constants.REDIRECT)){
|
||||
//重定向
|
||||
String path=str.substring(str.indexOf(Constants.FLAG)+1);
|
||||
resp.sendRedirect(path);
|
||||
}else{
|
||||
//就是要返回一个字符串
|
||||
resp.getWriter().println(str);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
//没有反射到方法
|
||||
}
|
||||
|
||||
}
|
||||
// /user?method=""
|
||||
//返回到首页的方法
|
||||
/**
|
||||
* 当method标识符"没有值"或者是空字符串时,我们默认赋index 访问每个Controller的index方法!
|
||||
* 我们将方法提取到BaseServlet中即可!
|
||||
* 默认处理:跳转到程序的首页!
|
||||
* @param req
|
||||
* @param resp
|
||||
* @return
|
||||
* @throws
|
||||
* @throws ServletException
|
||||
*/
|
||||
public String index (HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
|
||||
return Constants.FORWARD+"/index.jsp";
|
||||
}
|
||||
}
|
114
src/com/qf/controller/CartController.java
Normal file
114
src/com/qf/controller/CartController.java
Normal file
@@ -0,0 +1,114 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import com.qf.entity.Cart;
|
||||
import com.qf.entity.User;
|
||||
import com.qf.service.CartService;
|
||||
import com.qf.service.impl.CartServiceImpl;
|
||||
import com.qf.utils.Constants;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
@WebServlet("/cart")
|
||||
|
||||
public class CartController extends BaseServlet {
|
||||
|
||||
//加入购物车
|
||||
public String create(HttpServletRequest request, HttpServletResponse response) throws SQLException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
//1.判断用户是否登录,没有登录跳转到登录页面
|
||||
HttpSession session = request.getSession();
|
||||
//获取session中的用户信息
|
||||
User user = (User) session.getAttribute("loginUser");
|
||||
if (user == null) {
|
||||
session.setAttribute("msg", "添加购物车必须先登录!");
|
||||
return Constants.FORWARD + "/login.jsp";
|
||||
}
|
||||
|
||||
//2.获取到对应的商品 id 和用户 id
|
||||
int uid = user.getUid();
|
||||
String pid = request.getParameter("pid");
|
||||
|
||||
//3.调用对应的业务逻辑
|
||||
CartService cartService = new CartServiceImpl();
|
||||
cartService.createCart(uid, pid);
|
||||
|
||||
|
||||
//4.跳转到添加购物车成功页面
|
||||
return Constants.FORWARD + "/cartSuccess.jsp";
|
||||
}
|
||||
|
||||
//查看购物车
|
||||
public String show(HttpServletRequest request, HttpServletResponse response) throws SQLException, InvocationTargetException, IllegalAccessException {
|
||||
//1.判断用户是否登录
|
||||
HttpSession session = request.getSession();
|
||||
//获取session中的用户信息
|
||||
User user = (User) session.getAttribute("loginUser");
|
||||
if (user == null) {
|
||||
session.setAttribute("msg", "查看购物车必须先登录!");
|
||||
return Constants.FORWARD + "/login.jsp";
|
||||
}
|
||||
|
||||
//2.获取请求参数
|
||||
int uid = user.getUid();
|
||||
|
||||
//3.调用对应业务逻辑进行数据查询(查询当前客户购物车中信息)
|
||||
CartService cartService = new CartServiceImpl();
|
||||
//查询当前用户购物车中所有信息
|
||||
List<Cart> list = cartService.findAll(uid);
|
||||
|
||||
//4.将获取到的信息转发到共享域中
|
||||
request.setAttribute("list", list);
|
||||
|
||||
return Constants.FORWARD + "/cart.jsp";
|
||||
}
|
||||
|
||||
//购物车中删除物品
|
||||
public String delete(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
|
||||
//1.获取请求参数
|
||||
String cid = request.getParameter("cid");
|
||||
|
||||
//2.调用对应的业务逻辑
|
||||
CartService cartService = new CartServiceImpl();
|
||||
cartService.deleteCartByCid(cid);
|
||||
|
||||
//3.转达到展示的处理方法中
|
||||
return Constants.FORWARD + "/cart?method=show";
|
||||
}
|
||||
|
||||
//购物车中数量更改
|
||||
public String update(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
|
||||
//1.获取请求参数 cid 商品单价price 商品修改后数量cnum
|
||||
String cid = request.getParameter("cid");
|
||||
String price = request.getParameter("price");
|
||||
String cnum = request.getParameter("cnum");
|
||||
|
||||
//2.调用对应的业务逻辑
|
||||
CartService cartService = new CartServiceImpl();
|
||||
cartService.updateCartByCid(cid, price, cnum);
|
||||
|
||||
//3.转发到展示方法中
|
||||
return Constants.FORWARD + "/cart?method=show";
|
||||
}
|
||||
|
||||
//清空购物车
|
||||
public String clear(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
|
||||
//1.获取请求参数
|
||||
String uid = request.getParameter("uid");
|
||||
|
||||
//2.调用对应的业务逻辑 清空购物车
|
||||
CartService cartService = new CartServiceImpl();
|
||||
cartService.clearCartByUid(uid);
|
||||
|
||||
//3.转发到展示方法中
|
||||
return Constants.FORWARD + "/cart?method=show";
|
||||
}
|
||||
}
|
26
src/com/qf/controller/CodeController.java
Normal file
26
src/com/qf/controller/CodeController.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import cn.dsna.util.images.ValidateCode;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
@WebServlet("/code")
|
||||
public class CodeController extends BaseServlet {
|
||||
public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
|
||||
//1.生成验证码的对象
|
||||
ValidateCode validateCode = new ValidateCode(100, 35, 4, 25);
|
||||
//2.获取到对应的验证码
|
||||
String code = validateCode.getCode();
|
||||
//3.将获取到的验证码存到session中
|
||||
request.getSession().setAttribute("code", code);
|
||||
//4.创建出对应的字节文件对象
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
//写回 表示验证码通过这个字节文件写回页面
|
||||
validateCode.write(outputStream);
|
||||
}
|
||||
}
|
51
src/com/qf/controller/ProductController.java
Normal file
51
src/com/qf/controller/ProductController.java
Normal file
@@ -0,0 +1,51 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import com.qf.entity.PageBean;
|
||||
import com.qf.entity.Product;
|
||||
import com.qf.service.ProductService;
|
||||
import com.qf.service.impl.ProductServiceImpl;
|
||||
import com.qf.utils.Constants;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.sql.SQLException;
|
||||
|
||||
@WebServlet("/product")
|
||||
public class ProductController extends BaseServlet {
|
||||
public String show(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
//1.获取请求参数
|
||||
String tid = request.getParameter("tid");
|
||||
//获取当前页和页容量
|
||||
int pageSize = 8;
|
||||
//当前页
|
||||
String currentPage = request.getParameter("currentPage");
|
||||
//默认值 1
|
||||
int page = 1;
|
||||
if (currentPage != null) {
|
||||
page = Integer.parseInt(currentPage);
|
||||
}
|
||||
//2.调用业务逻辑
|
||||
ProductService productService = new ProductServiceImpl();
|
||||
PageBean<Product> pageBean = productService.findPage(tid, page, pageSize);
|
||||
|
||||
//3.响应
|
||||
request.setAttribute("pageBean", pageBean);
|
||||
return Constants.FORWARD + "/goodsList.jsp";
|
||||
}
|
||||
|
||||
public String detail(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
//1.获取请求参数
|
||||
String pid = request.getParameter("pid");
|
||||
//2.调用业务逻辑
|
||||
ProductService productService = new ProductServiceImpl();
|
||||
//3.声明方法
|
||||
Product product = productService.findProductByPid(pid);
|
||||
//3.响应
|
||||
request.setAttribute("product",product);
|
||||
//4.跳转到对应的商品页面
|
||||
return Constants.FORWARD+"/goodsDetail.jsp";
|
||||
}
|
||||
|
||||
|
||||
}
|
29
src/com/qf/controller/TypeController.java
Normal file
29
src/com/qf/controller/TypeController.java
Normal file
@@ -0,0 +1,29 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.qf.entity.Type;
|
||||
import com.qf.service.TypeService;
|
||||
import com.qf.service.impl.TypeServiceImpl;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
@WebServlet("/type")
|
||||
public class TypeController extends BaseServlet {
|
||||
public String findAll(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
//将查询到的数据转换成json的格式,传递给前端进行展示
|
||||
|
||||
//1.调用对象调用查询方法
|
||||
TypeService typeService = new TypeServiceImpl();
|
||||
List<Type> types = typeService.findAll();
|
||||
|
||||
//2.将集合转换为 json 数据
|
||||
Gson gson = new Gson();
|
||||
String json = gson.toJson(types);
|
||||
|
||||
return json;
|
||||
}
|
||||
}
|
118
src/com/qf/controller/UserController.java
Normal file
118
src/com/qf/controller/UserController.java
Normal file
@@ -0,0 +1,118 @@
|
||||
package com.qf.controller;
|
||||
|
||||
import com.qf.entity.User;
|
||||
import com.qf.service.UserService;
|
||||
import com.qf.service.impl.UserServiceImpl;
|
||||
import com.qf.utils.Constants;
|
||||
import com.qf.utils.MD5Utils;
|
||||
import com.qf.utils.RandomUtils;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Map;
|
||||
|
||||
@WebServlet("/user")
|
||||
public class UserController extends BaseServlet {
|
||||
|
||||
//1.查询用户是否存在
|
||||
public String check(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
//1.获取用户名
|
||||
String username = request.getParameter("username");
|
||||
if (username == null) {
|
||||
return "1";
|
||||
}
|
||||
//2.调用对应的业务逻辑判断用户名是否存在
|
||||
UserService userService = new UserServiceImpl();
|
||||
boolean b = userService.checkedUser(username);
|
||||
//3.响应
|
||||
if (b) {
|
||||
//用户名存在
|
||||
return "1";
|
||||
}
|
||||
return "0";
|
||||
}
|
||||
|
||||
//2.注册功能
|
||||
public String register(HttpServletRequest request, HttpServletResponse response) {
|
||||
//1.获取到我们的用户信息
|
||||
Map<String, String[]> parameterMap = request.getParameterMap();
|
||||
//定义一个User
|
||||
User user = new User();
|
||||
|
||||
try {
|
||||
BeanUtils.populate(user, parameterMap);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
//2.完善我们用户信息
|
||||
user.setUstatus("0");
|
||||
user.setUrole(0);
|
||||
user.setCode(RandomUtils.createActive());
|
||||
//对密码进行加密处理
|
||||
user.setUpassword(MD5Utils.md5(user.getUpassword()));
|
||||
//3.调用对应的业务逻辑进行注册
|
||||
UserService userService = new UserServiceImpl();
|
||||
|
||||
try {
|
||||
userService.registerUser(user);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
request.setAttribute("registerMsg", "注册失败!");
|
||||
return Constants.FORWARD + "/register.jsp";
|
||||
}
|
||||
//4.响应
|
||||
return Constants.FORWARD + "/registerSuccess.jsp";
|
||||
}
|
||||
|
||||
//3.登录功能
|
||||
public String login(HttpServletRequest request, HttpServletResponse response) throws SQLException {
|
||||
|
||||
//1.获取请求参数
|
||||
String username = request.getParameter("username");
|
||||
String password = request.getParameter("password");
|
||||
//用户输入的验证码
|
||||
String code = request.getParameter("code");
|
||||
|
||||
//2.获取正确的验证码(在session中)
|
||||
HttpSession session = request.getSession();
|
||||
String codestr = (String) session.getAttribute("code");
|
||||
|
||||
//3.判断验证码是否正确(空或者不匹配)
|
||||
if (code == null || !code.equalsIgnoreCase(codestr)) {
|
||||
//错误提示
|
||||
request.setAttribute("msg", "验证码错误!");
|
||||
//将页面返回登录页面
|
||||
return Constants.FORWARD + "login.jsp";
|
||||
}
|
||||
//4.调用业务逻辑判断账号密码是否正确(验证码正确的情况下)
|
||||
UserService userService = new UserServiceImpl();
|
||||
User user = userService.login(username, password);
|
||||
//5.响应
|
||||
if (user == null) {
|
||||
//错误提示
|
||||
request.setAttribute("msg", "用户名或密码错误!");
|
||||
//将页面返回登录页面
|
||||
return Constants.FORWARD + "login.jsp";
|
||||
}
|
||||
//6.进行登录
|
||||
session.setAttribute("loginUser", user);
|
||||
return Constants.FORWARD + "/index.jsp";
|
||||
}
|
||||
|
||||
//4.注销登录
|
||||
public String logOut(HttpServletRequest request, HttpServletResponse response) {
|
||||
//1.清空session中的用户数据
|
||||
HttpSession session = request.getSession();
|
||||
session.removeAttribute("loginUser");
|
||||
//2.提示注销并将页面转发到登录页面
|
||||
request.setAttribute("msg", "注销登录成功!");
|
||||
return Constants.FORWARD + "login.jsp";
|
||||
}
|
||||
}
|
4
src/com/qf/dao/AddressDao.java
Normal file
4
src/com/qf/dao/AddressDao.java
Normal file
@@ -0,0 +1,4 @@
|
||||
package com.qf.dao;
|
||||
|
||||
public interface AddressDao {
|
||||
}
|
25
src/com/qf/dao/CartDao.java
Normal file
25
src/com/qf/dao/CartDao.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package com.qf.dao;
|
||||
|
||||
import com.qf.entity.Cart;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public interface CartDao {
|
||||
|
||||
Cart hasCart(int uid, String pid) throws SQLException, InvocationTargetException, IllegalAccessException;
|
||||
|
||||
void updateCart(Cart cart) throws SQLException;
|
||||
|
||||
void insertCart(Cart cart) throws SQLException;
|
||||
|
||||
List<Cart> selectCartByUid(int uid) throws SQLException, InvocationTargetException, IllegalAccessException;
|
||||
|
||||
void deleteCartByCid(String cid) throws SQLException;
|
||||
|
||||
void updateByCid(BigDecimal count, BigDecimal cnumbig, String cid) throws SQLException;
|
||||
|
||||
void clearCartByUid(String uid) throws SQLException;
|
||||
}
|
14
src/com/qf/dao/ProductDao.java
Normal file
14
src/com/qf/dao/ProductDao.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package com.qf.dao;
|
||||
|
||||
import com.qf.entity.Product;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public interface ProductDao {
|
||||
long selectCountByTid(String tid) throws SQLException;
|
||||
|
||||
List<Product> selectProductByPage(int page, int pageSize, String tid) throws SQLException;
|
||||
|
||||
Product selectProductByPid(String pid) throws SQLException;
|
||||
}
|
11
src/com/qf/dao/TypeDao.java
Normal file
11
src/com/qf/dao/TypeDao.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package com.qf.dao;
|
||||
|
||||
import com.qf.entity.Type;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public interface TypeDao {
|
||||
//需要一个方法查询数据库类别表,返回Type
|
||||
List<Type> selectAll() throws SQLException;
|
||||
}
|
15
src/com/qf/dao/UserDao.java
Normal file
15
src/com/qf/dao/UserDao.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package com.qf.dao;
|
||||
|
||||
import com.qf.entity.User;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
//数据库访问接口
|
||||
public interface UserDao {
|
||||
//根据用户名查询用户是否存在
|
||||
User selectUserByUname(String username) throws SQLException;
|
||||
|
||||
//保存数据的方法
|
||||
int insertUser(User user) throws SQLException;
|
||||
|
||||
}
|
6
src/com/qf/dao/impl/AddressDaoImpl.java
Normal file
6
src/com/qf/dao/impl/AddressDaoImpl.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package com.qf.dao.impl;
|
||||
|
||||
import com.qf.dao.AddressDao;
|
||||
|
||||
public class AddressDaoImpl implements AddressDao {
|
||||
}
|
163
src/com/qf/dao/impl/CartDaoImpl.java
Normal file
163
src/com/qf/dao/impl/CartDaoImpl.java
Normal file
@@ -0,0 +1,163 @@
|
||||
package com.qf.dao.impl;
|
||||
|
||||
import com.qf.dao.CartDao;
|
||||
import com.qf.entity.Cart;
|
||||
import com.qf.entity.Product;
|
||||
import com.qf.utils.C3P0Utils;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.apache.commons.dbutils.QueryRunner;
|
||||
import org.apache.commons.dbutils.handlers.BeanHandler;
|
||||
import org.apache.commons.dbutils.handlers.MapHandler;
|
||||
import org.apache.commons.dbutils.handlers.MapListHandler;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class CartDaoImpl implements CartDao {
|
||||
@Override
|
||||
public Cart hasCart(int uid, String pid) throws SQLException, InvocationTargetException, IllegalAccessException {
|
||||
//cart-->product 间接查询,多表查询
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "select p.p_name as pname, p.p_id as pid, p.t_id as tid, " +
|
||||
"p.p_time as ptime, p.p_image as piamge, p.p_state as pstate, " +
|
||||
"p.p_info as pinfo, p.p_price as pprice, c.c_id as cid, " +
|
||||
"c.u_id as uid, c.c_count as ccount, c.c_num as cnum " +
|
||||
"from product p join cart c on p.p_id = c.p_id where c.u_id = ? and c.p_id = ?";
|
||||
|
||||
//3.执行sql语句
|
||||
Map<String, Object> query = queryRunner.query(sql, new MapHandler(), uid, pid);
|
||||
|
||||
|
||||
//4.判断并处理信息
|
||||
if (query == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Product product = queryRunner.query(sql, new BeanHandler<Product>(Product.class), uid, pid);
|
||||
// Cart cart = queryRunner.query(sql, new BeanHandler<Cart>(Cart.class), uid, pid);
|
||||
Product product = new Product();
|
||||
Cart cart = new Cart();
|
||||
|
||||
//通过工具类 BeanUtils 将对应 key 值的信息进行赋值
|
||||
BeanUtils.populate(cart, query);
|
||||
BeanUtils.populate(product, query);
|
||||
|
||||
cart.setProduct(product);
|
||||
|
||||
return cart;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateCart(Cart cart) throws SQLException {
|
||||
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "update cart set c_num = ? , c_count = ? where c_id = ?;";
|
||||
|
||||
//3.执行sql
|
||||
queryRunner.update(sql, cart.getCnum(), cart.getCcount(), cart.getCid());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertCart(Cart cart) throws SQLException {
|
||||
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "insert into cart ( u_id , p_id , c_num , c_count ) value ( ? , ? , ? , ? );";
|
||||
|
||||
//3.执行sql
|
||||
queryRunner.update(sql, cart.getUid(), cart.getPid(), cart.getCnum(), cart.getCcount());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Cart> selectCartByUid(int uid) throws SQLException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "select p.p_name as pname, p.p_id as pid, p.t_id as tid, " +
|
||||
"p.p_time as ptime, p.p_image as piamge, p.p_state as pstate, " +
|
||||
"p.p_info as pinfo, p.p_price as pprice, c.c_id as cid, " +
|
||||
"c.u_id as uid, c.c_count as ccount, c.c_num as cnum " +
|
||||
"from product p join cart c on p.p_id = c.p_id where c.u_id = ? ;";
|
||||
|
||||
//3.执行sql
|
||||
List<Map<String, Object>> list = queryRunner.query(sql, new MapListHandler(), uid);
|
||||
|
||||
//判空
|
||||
if (list == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
//4.创建集合放购物车中对应的商品
|
||||
List<Cart> carts = new ArrayList<>();
|
||||
//for循环遍历存储信息
|
||||
for (Map<String, Object> map : list) {
|
||||
Product product = new Product();
|
||||
Cart cart = new Cart();
|
||||
|
||||
//通过工具类 BeanUtils 将对应 key 值的信息进行赋值
|
||||
BeanUtils.populate(cart, map);
|
||||
BeanUtils.populate(product, map);
|
||||
|
||||
//手动将 product 关联到 Cart
|
||||
cart.setProduct(product);
|
||||
//添加数据到 carts
|
||||
carts.add(cart);
|
||||
}
|
||||
|
||||
return carts;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteCartByCid(String cid) throws SQLException {
|
||||
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "delete from cart where c_id = ? ;";
|
||||
|
||||
//3.执行sql
|
||||
queryRunner.update(sql, cid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateByCid(BigDecimal count, BigDecimal cnumbig, String cid) throws SQLException {
|
||||
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "update cart set c_count = ? , c_num = ? where c_id = ? ;";
|
||||
|
||||
//3.执行sql
|
||||
queryRunner.update(sql, count, cnumbig, cid);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearCartByUid(String uid) throws SQLException {
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "delete from cart where u_id = ? ;";
|
||||
|
||||
//3.执行sql
|
||||
queryRunner.update(sql, uid);
|
||||
}
|
||||
|
||||
}
|
61
src/com/qf/dao/impl/ProductDaoImpl.java
Normal file
61
src/com/qf/dao/impl/ProductDaoImpl.java
Normal file
@@ -0,0 +1,61 @@
|
||||
package com.qf.dao.impl;
|
||||
|
||||
import com.qf.dao.ProductDao;
|
||||
import com.qf.entity.Product;
|
||||
import com.qf.utils.C3P0Utils;
|
||||
import org.apache.commons.dbutils.QueryRunner;
|
||||
import org.apache.commons.dbutils.handlers.BeanHandler;
|
||||
import org.apache.commons.dbutils.handlers.BeanListHandler;
|
||||
import org.apache.commons.dbutils.handlers.ScalarHandler;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class ProductDaoImpl implements ProductDao {
|
||||
@Override
|
||||
public long selectCountByTid(String tid) throws SQLException {
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "select count(1) from product where t_id=?;";
|
||||
|
||||
Object result = queryRunner.query(sql, new ScalarHandler(), tid);
|
||||
|
||||
Long total = (Long) result;
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Product> selectProductByPage(int page, int pageSize, String tid) throws SQLException {
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "select p_id as pid ,t_id as tid ,p_name as pname ,p_time as ptime ," +
|
||||
"p_image as pimage ,p_state as pstate ,p_info as pinfo ,p_price as pprice " +
|
||||
"from product where t_id=? limit ?,?;";
|
||||
|
||||
//3.
|
||||
List<Product> list = queryRunner.query(sql, new BeanListHandler<Product>(Product.class), tid, (page - 1) * pageSize, pageSize);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Product selectProductByPid(String pid) throws SQLException {
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "select p_id as pid ,t_id as tid ,p_name as pname ,p_time as ptime ," +
|
||||
"p_image as pimage ,p_state as pstate ,p_info as pinfo ,p_price as pprice " +
|
||||
"from product where p_id=?;";
|
||||
|
||||
//3.
|
||||
Product product = queryRunner.query(sql,new BeanHandler<Product>(Product.class),pid);
|
||||
|
||||
return product;
|
||||
}
|
||||
}
|
26
src/com/qf/dao/impl/TypeDaoImpl.java
Normal file
26
src/com/qf/dao/impl/TypeDaoImpl.java
Normal file
@@ -0,0 +1,26 @@
|
||||
package com.qf.dao.impl;
|
||||
|
||||
import com.qf.dao.TypeDao;
|
||||
import com.qf.entity.Type;
|
||||
import com.qf.utils.C3P0Utils;
|
||||
import org.apache.commons.dbutils.QueryRunner;
|
||||
import org.apache.commons.dbutils.handlers.BeanListHandler;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class TypeDaoImpl implements TypeDao {
|
||||
@Override
|
||||
public List<Type> selectAll() throws SQLException {
|
||||
//1.创建 QueryRunner对象
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql(limit 5)
|
||||
String sql = "select t_id as tid ,t_name as tname ,t_info as tinfo from type limit 5;";
|
||||
|
||||
//3.执行sql语句
|
||||
List<Type> list = queryRunner.query(sql, new BeanListHandler<Type>(Type.class));
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
41
src/com/qf/dao/impl/UserDaoImpl.java
Normal file
41
src/com/qf/dao/impl/UserDaoImpl.java
Normal file
@@ -0,0 +1,41 @@
|
||||
package com.qf.dao.impl;
|
||||
|
||||
import com.qf.dao.UserDao;
|
||||
import com.qf.entity.User;
|
||||
import com.qf.utils.C3P0Utils;
|
||||
import org.apache.commons.dbutils.QueryRunner;
|
||||
import org.apache.commons.dbutils.handlers.BeanHandler;
|
||||
|
||||
import javax.management.Query;
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class UserDaoImpl implements UserDao {
|
||||
//根据用户名查询用户是否存在
|
||||
@Override
|
||||
public User selectUserByUname(String username) throws SQLException {
|
||||
//1.创建一个QueryRunner 对象,传入我们对应的连接池
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
//2.编写sql语句完成查询操作
|
||||
String sql = "select u_id as uid ,u_name as username , u_password as upassword ," +
|
||||
"u_sex as usex ,u_status as ustatus ,u_code as code, u_email as email ," +
|
||||
"u_role as urole from user where u_name=?;";
|
||||
//3.执行sql
|
||||
User user = queryRunner.query(sql, new BeanHandler<User>(User.class), username);
|
||||
return user;
|
||||
}
|
||||
|
||||
//保存数据的方法
|
||||
@Override
|
||||
public int insertUser(User user) throws SQLException {
|
||||
//1.创建一个QueryRunner对象,传入我们对应的连接池
|
||||
QueryRunner queryRunner = new QueryRunner(C3P0Utils.getDataSource());
|
||||
|
||||
//2.编写sql
|
||||
String sql = "insert into user(u_name ,u_password,u_sex,u_status, " +
|
||||
"u_code ,u_email,u_role) value(?,?,?,?,?,?,?);";
|
||||
//执行sql
|
||||
int rows = queryRunner.update(sql, user.getUsername(), user.getUpassword(), user.getUsex(),
|
||||
user.getUstatus(), user.getCode(), user.getEmail(), user.getUrole());
|
||||
return rows;
|
||||
}
|
||||
}
|
74
src/com/qf/entity/Address.java
Normal file
74
src/com/qf/entity/Address.java
Normal file
@@ -0,0 +1,74 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class Address implements Serializable {
|
||||
private static final long serialVersionUID =1L;
|
||||
|
||||
private int aid;
|
||||
private int uid;
|
||||
private String aname;
|
||||
private String aphone;
|
||||
private String adetail;
|
||||
private int astate;
|
||||
|
||||
public int getAid() {
|
||||
return aid;
|
||||
}
|
||||
|
||||
public void setAid(int aid) {
|
||||
this.aid = aid;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setUid(int uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
public String getAname() {
|
||||
return aname;
|
||||
}
|
||||
|
||||
public void setAname(String aname) {
|
||||
this.aname = aname;
|
||||
}
|
||||
|
||||
public String getAphone() {
|
||||
return aphone;
|
||||
}
|
||||
|
||||
public void setAphone(String aphone) {
|
||||
this.aphone = aphone;
|
||||
}
|
||||
|
||||
public String getAdetail() {
|
||||
return adetail;
|
||||
}
|
||||
|
||||
public void setAdetail(String adetail) {
|
||||
this.adetail = adetail;
|
||||
}
|
||||
|
||||
public int getAstate() {
|
||||
return astate;
|
||||
}
|
||||
|
||||
public void setAstate(int astate) {
|
||||
this.astate = astate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Address{" +
|
||||
"aid=" + aid +
|
||||
", uid=" + uid +
|
||||
", aname='" + aname + '\'' +
|
||||
", aphone='" + aphone + '\'' +
|
||||
", adetail='" + adetail + '\'' +
|
||||
", astate=" + astate +
|
||||
'}';
|
||||
}
|
||||
}
|
84
src/com/qf/entity/Cart.java
Normal file
84
src/com/qf/entity/Cart.java
Normal file
@@ -0,0 +1,84 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 数据库对应的购物车表
|
||||
*/
|
||||
public class Cart implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private int cid;
|
||||
private int uid;
|
||||
private int pid;
|
||||
private Product product;
|
||||
private int cnum = 0; //购车商品数量
|
||||
private BigDecimal ccount; //购物车小计
|
||||
|
||||
public Cart() {
|
||||
}
|
||||
|
||||
public Product getProduct() {
|
||||
return product;
|
||||
}
|
||||
|
||||
public void setProduct(Product product) {
|
||||
this.product = product;
|
||||
}
|
||||
|
||||
public int getPid() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
public void setPid(int pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Cart{" +
|
||||
"cid=" + cid +
|
||||
", uid=" + uid +
|
||||
", cnum=" + cnum +
|
||||
", ccount=" + ccount +
|
||||
'}';
|
||||
}
|
||||
|
||||
public int getCid() {
|
||||
return cid;
|
||||
}
|
||||
|
||||
public void setCid(int cid) {
|
||||
this.cid = cid;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setUid(int uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
public int getCnum() {
|
||||
return cnum;
|
||||
}
|
||||
|
||||
public void setCnum(int cnum) {
|
||||
this.cnum = cnum;
|
||||
}
|
||||
|
||||
public BigDecimal getCcount() {
|
||||
|
||||
BigDecimal pprice = product.getPprice();
|
||||
BigDecimal bigDecimal = new BigDecimal(cnum);
|
||||
|
||||
return pprice.multiply(bigDecimal);
|
||||
}
|
||||
|
||||
public void setCcount(BigDecimal ccount) {
|
||||
this.ccount = ccount;
|
||||
}
|
||||
}
|
79
src/com/qf/entity/Item.java
Normal file
79
src/com/qf/entity/Item.java
Normal file
@@ -0,0 +1,79 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 对应数据库订单项
|
||||
*/
|
||||
public class Item implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private int iid;
|
||||
private String oid;
|
||||
private int pid;
|
||||
private Product product;
|
||||
private BigDecimal icount;
|
||||
private int inum;
|
||||
|
||||
|
||||
public Product getProduct() {
|
||||
return product;
|
||||
}
|
||||
|
||||
public void setProduct(Product product) {
|
||||
this.product = product;
|
||||
}
|
||||
|
||||
public int getIid() {
|
||||
return iid;
|
||||
}
|
||||
|
||||
public void setIid(int iid) {
|
||||
this.iid = iid;
|
||||
}
|
||||
|
||||
public String getOid() {
|
||||
return oid;
|
||||
}
|
||||
|
||||
public void setOid(String oid) {
|
||||
this.oid = oid;
|
||||
}
|
||||
|
||||
public int getPid() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
public void setPid(int pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
|
||||
public BigDecimal getIcount() {
|
||||
return icount;
|
||||
}
|
||||
|
||||
public void setIcount(BigDecimal icount) {
|
||||
this.icount = icount;
|
||||
}
|
||||
|
||||
public int getInum() {
|
||||
return inum;
|
||||
}
|
||||
|
||||
public void setInum(int inum) {
|
||||
this.inum = inum;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Item{" +
|
||||
"iid=" + iid +
|
||||
", oid='" + oid + '\'' +
|
||||
", pid=" + pid +
|
||||
", icount=" + icount +
|
||||
", inum=" + inum +
|
||||
'}';
|
||||
}
|
||||
}
|
102
src/com/qf/entity/Orders.java
Normal file
102
src/com/qf/entity/Orders.java
Normal file
@@ -0,0 +1,102 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 对应数据库的订单表
|
||||
*/
|
||||
public class Orders implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String oid;
|
||||
private int uid;
|
||||
private int aid;
|
||||
private Address address;
|
||||
private BigDecimal ocount; //订单总金额
|
||||
private Date otime;
|
||||
private int ostate; //订单状态 0 未付款,1已经付款未发货 2发货待收货 3 收货待评价 4订单完成 5 退货状态
|
||||
private List<Item> items;
|
||||
|
||||
public List<Item> getItems() {
|
||||
return items;
|
||||
}
|
||||
|
||||
public void setItems(List<Item> items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
public Address getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public void setAddress(Address address) {
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public String getOid() {
|
||||
return oid;
|
||||
}
|
||||
|
||||
public void setOid(String oid) {
|
||||
this.oid = oid;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setUid(int uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
public int getAid() {
|
||||
return aid;
|
||||
}
|
||||
|
||||
public void setAid(int aid) {
|
||||
this.aid = aid;
|
||||
}
|
||||
|
||||
|
||||
public BigDecimal getOcount() {
|
||||
return ocount;
|
||||
}
|
||||
|
||||
public void setOcount(BigDecimal ocount) {
|
||||
this.ocount = ocount;
|
||||
}
|
||||
|
||||
public Date getOtime() {
|
||||
return otime;
|
||||
}
|
||||
|
||||
public void setOtime(Date otime) {
|
||||
this.otime = otime;
|
||||
}
|
||||
|
||||
public int getOstate() {
|
||||
return ostate;
|
||||
}
|
||||
|
||||
public void setOstate(int ostate) {
|
||||
this.ostate = ostate;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Orders{" +
|
||||
"oid='" + oid + '\'' +
|
||||
", uid=" + uid +
|
||||
", aid=" + aid +
|
||||
", ocount=" + ocount +
|
||||
", otime=" + otime +
|
||||
", ostate=" + ostate +
|
||||
'}';
|
||||
}
|
||||
}
|
64
src/com/qf/entity/PageBean.java
Normal file
64
src/com/qf/entity/PageBean.java
Normal file
@@ -0,0 +1,64 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
//PageBean<T>加一个泛型T
|
||||
public class PageBean<T> {
|
||||
|
||||
private List<T> list;//展示的数据
|
||||
private int currentPage;//当前页数
|
||||
private int pageSize;//页容量,每页显示的数据条数
|
||||
private long totalCount; //总条数
|
||||
private int totalPage; //总页数
|
||||
|
||||
//不传入总页数(构造方法)
|
||||
public PageBean(List<T> list, int currentPage, int pageSize, long totalCount) {
|
||||
this.list = list;
|
||||
this.currentPage = currentPage;
|
||||
this.pageSize = pageSize;
|
||||
this.totalCount = totalCount;
|
||||
}
|
||||
|
||||
//添加get/set方法
|
||||
public List<T> getList() {
|
||||
return list;
|
||||
}
|
||||
|
||||
public void setList(List<T> list) {
|
||||
this.list = list;
|
||||
}
|
||||
|
||||
public int getCurrentPage() {
|
||||
return currentPage;
|
||||
}
|
||||
|
||||
public void setCurrentPage(int currentPage) {
|
||||
this.currentPage = currentPage;
|
||||
}
|
||||
|
||||
public int getPageSize() {
|
||||
return pageSize;
|
||||
}
|
||||
|
||||
public void setPageSize(int pageSize) {
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
public long getTotalCount() {
|
||||
return totalCount;
|
||||
}
|
||||
|
||||
public void setTotalCount(long totalCount) {
|
||||
this.totalCount = totalCount;
|
||||
}
|
||||
|
||||
public int getTotalPage() {
|
||||
//需要进行一个运算
|
||||
//13条数据 每页显示5 3(Math.ceil向下舍余)(totalCount*1.0转成double类型)
|
||||
return (int) Math.ceil(totalCount*1.0/pageSize);
|
||||
}
|
||||
|
||||
public void setTotalPage(int totalPage) {
|
||||
this.totalPage = totalPage;
|
||||
}
|
||||
}
|
100
src/com/qf/entity/Product.java
Normal file
100
src/com/qf/entity/Product.java
Normal file
@@ -0,0 +1,100 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
* 对应数据库的商品表
|
||||
*/
|
||||
public class Product implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private int pid;
|
||||
private int tid;
|
||||
private String pname;
|
||||
private Date ptime; //商品的上架时间! 数据库date --> java.util.Date
|
||||
private String pimage; //商品的图片名称
|
||||
private int pstate; //商品的热门指数
|
||||
private String pinfo; //商品的描述
|
||||
private BigDecimal pprice; //价格
|
||||
|
||||
public BigDecimal getPprice() {
|
||||
return pprice;
|
||||
}
|
||||
|
||||
public void setPprice(BigDecimal pprice) {
|
||||
this.pprice = pprice;
|
||||
}
|
||||
|
||||
public int getPid() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
public void setPid(int pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
|
||||
public int getTid() {
|
||||
return tid;
|
||||
}
|
||||
|
||||
public void setTid(int tid) {
|
||||
this.tid = tid;
|
||||
}
|
||||
|
||||
public String getPname() {
|
||||
return pname;
|
||||
}
|
||||
|
||||
public void setPname(String pname) {
|
||||
this.pname = pname;
|
||||
}
|
||||
|
||||
public Date getPtime() {
|
||||
return ptime;
|
||||
}
|
||||
|
||||
public void setPtime(Date ptime) {
|
||||
this.ptime = ptime;
|
||||
}
|
||||
|
||||
public String getPimage() {
|
||||
return pimage;
|
||||
}
|
||||
|
||||
public void setPimage(String pimage) {
|
||||
this.pimage = pimage;
|
||||
}
|
||||
|
||||
public int getPstate() {
|
||||
return pstate;
|
||||
}
|
||||
|
||||
public void setPstate(int pstate) {
|
||||
this.pstate = pstate;
|
||||
}
|
||||
|
||||
public String getPinfo() {
|
||||
return pinfo;
|
||||
}
|
||||
|
||||
public void setPinfo(String pinfo) {
|
||||
this.pinfo = pinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Product{" +
|
||||
"pid=" + pid +
|
||||
", tid=" + tid +
|
||||
", pname='" + pname + '\'' +
|
||||
", ptime=" + ptime +
|
||||
", pimage='" + pimage + '\'' +
|
||||
", pstate=" + pstate +
|
||||
", pinfo='" + pinfo + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
161
src/com/qf/entity/Result.java
Normal file
161
src/com/qf/entity/Result.java
Normal file
@@ -0,0 +1,161 @@
|
||||
package com.qf.entity;
|
||||
|
||||
public class Result {
|
||||
private String appid;
|
||||
private String bank_type;
|
||||
private String cash_fee;
|
||||
private String is_subscribe;
|
||||
private String mch_id;
|
||||
private String nonce_str;
|
||||
private String openid;
|
||||
private String out_trade_no;
|
||||
private String result_code;//支付结果
|
||||
private String return_code;
|
||||
private String sign;
|
||||
|
||||
private String time_end;
|
||||
private String total_fee;//总支付价格
|
||||
private String trade_type;
|
||||
private String transaction_id;
|
||||
|
||||
public String getAppid() {
|
||||
return appid;
|
||||
}
|
||||
|
||||
public void setAppid(String appid) {
|
||||
this.appid = appid;
|
||||
}
|
||||
|
||||
public String getBank_type() {
|
||||
return bank_type;
|
||||
}
|
||||
|
||||
public void setBank_type(String bank_type) {
|
||||
this.bank_type = bank_type;
|
||||
}
|
||||
|
||||
public String getCash_fee() {
|
||||
return cash_fee;
|
||||
}
|
||||
|
||||
public void setCash_fee(String cash_fee) {
|
||||
this.cash_fee = cash_fee;
|
||||
}
|
||||
|
||||
public String getIs_subscribe() {
|
||||
return is_subscribe;
|
||||
}
|
||||
|
||||
public void setIs_subscribe(String is_subscribe) {
|
||||
this.is_subscribe = is_subscribe;
|
||||
}
|
||||
|
||||
public String getMch_id() {
|
||||
return mch_id;
|
||||
}
|
||||
|
||||
public void setMch_id(String mch_id) {
|
||||
this.mch_id = mch_id;
|
||||
}
|
||||
|
||||
public String getNonce_str() {
|
||||
return nonce_str;
|
||||
}
|
||||
|
||||
public void setNonce_str(String nonce_str) {
|
||||
this.nonce_str = nonce_str;
|
||||
}
|
||||
|
||||
public String getOpenid() {
|
||||
return openid;
|
||||
}
|
||||
|
||||
public void setOpenid(String openid) {
|
||||
this.openid = openid;
|
||||
}
|
||||
|
||||
public String getOut_trade_no() {
|
||||
return out_trade_no;
|
||||
}
|
||||
|
||||
public void setOut_trade_no(String out_trade_no) {
|
||||
this.out_trade_no = out_trade_no;
|
||||
}
|
||||
|
||||
public String getResult_code() {
|
||||
return result_code;
|
||||
}
|
||||
|
||||
public void setResult_code(String result_code) {
|
||||
this.result_code = result_code;
|
||||
}
|
||||
|
||||
public String getReturn_code() {
|
||||
return return_code;
|
||||
}
|
||||
|
||||
public void setReturn_code(String return_code) {
|
||||
this.return_code = return_code;
|
||||
}
|
||||
|
||||
public String getSign() {
|
||||
return sign;
|
||||
}
|
||||
|
||||
public void setSign(String sign) {
|
||||
this.sign = sign;
|
||||
}
|
||||
|
||||
public String getTime_end() {
|
||||
return time_end;
|
||||
}
|
||||
|
||||
public void setTime_end(String time_end) {
|
||||
this.time_end = time_end;
|
||||
}
|
||||
|
||||
public String getTotal_fee() {
|
||||
return total_fee;
|
||||
}
|
||||
|
||||
public void setTotal_fee(String total_fee) {
|
||||
this.total_fee = total_fee;
|
||||
}
|
||||
|
||||
public String getTrade_type() {
|
||||
return trade_type;
|
||||
}
|
||||
|
||||
public void setTrade_type(String trade_type) {
|
||||
this.trade_type = trade_type;
|
||||
}
|
||||
|
||||
public String getTransaction_id() {
|
||||
return transaction_id;
|
||||
}
|
||||
|
||||
public void setTransaction_id(String transaction_id) {
|
||||
this.transaction_id = transaction_id;
|
||||
}
|
||||
|
||||
public Result(String appid, String bank_type, String cash_fee, String is_subscribe, String mch_id, String nonce_str,
|
||||
String openid, String out_trade_no, String result_code, String return_code, String sign, String time_end,
|
||||
String total_fee, String trade_type, String transaction_id) {
|
||||
super();
|
||||
this.appid = appid;
|
||||
this.bank_type = bank_type;
|
||||
this.cash_fee = cash_fee;
|
||||
this.is_subscribe = is_subscribe;
|
||||
this.mch_id = mch_id;
|
||||
this.nonce_str = nonce_str;
|
||||
this.openid = openid;
|
||||
this.out_trade_no = out_trade_no;
|
||||
this.result_code = result_code;
|
||||
this.return_code = return_code;
|
||||
this.sign = sign;
|
||||
this.time_end = time_end;
|
||||
this.total_fee = total_fee;
|
||||
this.trade_type = trade_type;
|
||||
this.transaction_id = transaction_id;
|
||||
}
|
||||
}
|
48
src/com/qf/entity/Type.java
Normal file
48
src/com/qf/entity/Type.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 对应的数据库的类别表
|
||||
*/
|
||||
public class Type implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private int tid; // '类别的主键id',
|
||||
private String tname; // '类别的名称',
|
||||
private String tinfo; //'类别的描述',
|
||||
|
||||
public int getTid() {
|
||||
return tid;
|
||||
}
|
||||
|
||||
public void setTid(int tid) {
|
||||
this.tid = tid;
|
||||
}
|
||||
|
||||
public String getTname() {
|
||||
return tname;
|
||||
}
|
||||
|
||||
public void setTname(String tname) {
|
||||
this.tname = tname;
|
||||
}
|
||||
|
||||
public String getTinfo() {
|
||||
return tinfo;
|
||||
}
|
||||
|
||||
public void setTinfo(String tinfo) {
|
||||
this.tinfo = tinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Type{" +
|
||||
"tid=" + tid +
|
||||
", tname='" + tname + '\'' +
|
||||
", tinfo='" + tinfo + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
99
src/com/qf/entity/User.java
Normal file
99
src/com/qf/entity/User.java
Normal file
@@ -0,0 +1,99 @@
|
||||
package com.qf.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 对应数据库的用户表
|
||||
*/
|
||||
public class User implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private int uid;
|
||||
private String username; //对应的是数据库的uname字段
|
||||
private String upassword; //密码
|
||||
private String usex; //性别
|
||||
private String ustatus; //用户的激活状态 0 未激活 1 激活
|
||||
|
||||
private String code;
|
||||
private String email; //对应的是数据库的uemail字段
|
||||
private int urole; //用户 0 管理员 1
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(String code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getEmail() {
|
||||
return email;
|
||||
}
|
||||
|
||||
public void setEmail(String email) {
|
||||
this.email = email;
|
||||
}
|
||||
|
||||
public int getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setUid(int uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
|
||||
public String getUpassword() {
|
||||
return upassword;
|
||||
}
|
||||
|
||||
public void setUpassword(String upassword) {
|
||||
this.upassword = upassword;
|
||||
}
|
||||
|
||||
public String getUsex() {
|
||||
return usex;
|
||||
}
|
||||
|
||||
public void setUsex(String usex) {
|
||||
this.usex = usex;
|
||||
}
|
||||
|
||||
public String getUstatus() {
|
||||
return ustatus;
|
||||
}
|
||||
|
||||
public void setUstatus(String ustatus) {
|
||||
this.ustatus = ustatus;
|
||||
}
|
||||
|
||||
public int getUrole() {
|
||||
return urole;
|
||||
}
|
||||
|
||||
public void setUrole(int urole) {
|
||||
this.urole = urole;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "User{" +
|
||||
"uid=" + uid +
|
||||
", username='" + username + '\'' +
|
||||
", upassword='" + upassword + '\'' +
|
||||
", usex='" + usex + '\'' +
|
||||
", ustatus='" + ustatus + '\'' +
|
||||
", code='" + code + '\'' +
|
||||
", email='" + email + '\'' +
|
||||
", urole=" + urole +
|
||||
'}';
|
||||
}
|
||||
}
|
28
src/com/qf/entity/WeiXin.java
Normal file
28
src/com/qf/entity/WeiXin.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package com.qf.entity;
|
||||
|
||||
public class WeiXin {
|
||||
|
||||
private Result result;
|
||||
private String type;
|
||||
public Result getResult() {
|
||||
return result;
|
||||
}
|
||||
public void setResult(Result result) {
|
||||
this.result = result;
|
||||
}
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
public WeiXin(Result result, String type) {
|
||||
super();
|
||||
this.result = result;
|
||||
this.type = type;
|
||||
}
|
||||
public WeiXin() {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
27
src/com/qf/filter/EncodingFilter.java
Normal file
27
src/com/qf/filter/EncodingFilter.java
Normal file
@@ -0,0 +1,27 @@
|
||||
package com.qf.filter;
|
||||
|
||||
import javax.servlet.*;
|
||||
import javax.servlet.annotation.WebFilter;
|
||||
import java.io.IOException;
|
||||
|
||||
@WebFilter(urlPatterns = "/*")
|
||||
public class EncodingFilter implements Filter {
|
||||
@Override
|
||||
public void init(FilterConfig filterConfig) throws ServletException {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
|
||||
//1.设置编码格式
|
||||
servletRequest.setCharacterEncoding("utf-8");
|
||||
servletResponse.setContentType("text/html;charset=utf-8");
|
||||
//2放行
|
||||
filterChain.doFilter(servletRequest, servletResponse);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
|
||||
}
|
||||
}
|
4
src/com/qf/service/AddressService.java
Normal file
4
src/com/qf/service/AddressService.java
Normal file
@@ -0,0 +1,4 @@
|
||||
package com.qf.service;
|
||||
|
||||
public interface AddressService {
|
||||
}
|
19
src/com/qf/service/CartService.java
Normal file
19
src/com/qf/service/CartService.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package com.qf.service;
|
||||
|
||||
import com.qf.entity.Cart;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public interface CartService {
|
||||
void createCart(int uid, String pid) throws SQLException, InvocationTargetException, IllegalAccessException;
|
||||
|
||||
List<Cart> findAll(int uid) throws SQLException, InvocationTargetException, IllegalAccessException;
|
||||
|
||||
void deleteCartByCid(String cid) throws SQLException;
|
||||
|
||||
void updateCartByCid(String cid, String price, String cnum) throws SQLException;
|
||||
|
||||
void clearCartByUid(String uid) throws SQLException;
|
||||
}
|
12
src/com/qf/service/ProductService.java
Normal file
12
src/com/qf/service/ProductService.java
Normal file
@@ -0,0 +1,12 @@
|
||||
package com.qf.service;
|
||||
|
||||
import com.qf.entity.PageBean;
|
||||
import com.qf.entity.Product;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
public interface ProductService {
|
||||
PageBean<Product> findPage(String tid, int page, int pageSize) throws SQLException;
|
||||
|
||||
Product findProductByPid(String pid) throws SQLException;
|
||||
}
|
13
src/com/qf/service/TypeService.java
Normal file
13
src/com/qf/service/TypeService.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package com.qf.service;
|
||||
|
||||
import com.qf.entity.Type;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public interface TypeService {
|
||||
|
||||
//查询返回所有类别表中对应的type信息
|
||||
List<Type> findAll() throws SQLException;
|
||||
|
||||
}
|
17
src/com/qf/service/UserService.java
Normal file
17
src/com/qf/service/UserService.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.qf.service;
|
||||
|
||||
import com.qf.entity.User;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
public interface UserService {
|
||||
|
||||
//查询用户名是否存在
|
||||
boolean checkedUser(String username) throws SQLException;
|
||||
|
||||
//注册业务逻辑
|
||||
int registerUser(User user) throws SQLException;
|
||||
|
||||
//登录的业务逻辑
|
||||
User login(String username, String password) throws SQLException;
|
||||
}
|
6
src/com/qf/service/impl/AddressServiceImpl.java
Normal file
6
src/com/qf/service/impl/AddressServiceImpl.java
Normal file
@@ -0,0 +1,6 @@
|
||||
package com.qf.service.impl;
|
||||
|
||||
import com.qf.service.AddressService;
|
||||
|
||||
public class AddressServiceImpl implements AddressService {
|
||||
}
|
88
src/com/qf/service/impl/CartServiceImpl.java
Normal file
88
src/com/qf/service/impl/CartServiceImpl.java
Normal file
@@ -0,0 +1,88 @@
|
||||
package com.qf.service.impl;
|
||||
|
||||
import com.qf.dao.CartDao;
|
||||
import com.qf.dao.ProductDao;
|
||||
import com.qf.dao.impl.CartDaoImpl;
|
||||
import com.qf.dao.impl.ProductDaoImpl;
|
||||
import com.qf.entity.Cart;
|
||||
import com.qf.entity.Product;
|
||||
import com.qf.service.CartService;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class CartServiceImpl implements CartService {
|
||||
//1.向购物车中添加物品
|
||||
@Override
|
||||
public void createCart(int uid, String pid) throws SQLException, InvocationTargetException, IllegalAccessException {
|
||||
//1.判断商品是否已经存在
|
||||
CartDao cartDao = new CartDaoImpl();
|
||||
Cart cart = cartDao.hasCart(uid, pid);
|
||||
|
||||
if (cart != null) {
|
||||
//已存在该物品,修改数量
|
||||
cart.setCnum(cart.getCnum() + 1);
|
||||
cartDao.updateCart(cart);
|
||||
} else {
|
||||
//不存在该物品,添加该物品
|
||||
ProductDao productDao = new ProductDaoImpl();
|
||||
Product product = productDao.selectProductByPid(pid);
|
||||
|
||||
//完成添加
|
||||
cart = new Cart();
|
||||
cart.setCnum(1);
|
||||
cart.setPid(Integer.parseInt(pid));
|
||||
cart.setProduct(product);
|
||||
cart.setUid(uid);
|
||||
|
||||
//完成插入操作
|
||||
cartDao.insertCart(cart);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//2.根据uid查询所有商品
|
||||
@Override
|
||||
public List<Cart> findAll(int uid) throws SQLException, InvocationTargetException, IllegalAccessException {
|
||||
|
||||
CartDao cartDao = new CartDaoImpl();
|
||||
//1.根据用户 id 查询对应购物车里面的商品
|
||||
List<Cart> carts = cartDao.selectCartByUid(uid);
|
||||
return carts;
|
||||
}
|
||||
|
||||
//3.根据cid删除购物车中物品
|
||||
@Override
|
||||
public void deleteCartByCid(String cid) throws SQLException {
|
||||
CartDao cartDao = new CartDaoImpl();
|
||||
cartDao.deleteCartByCid(cid);
|
||||
}
|
||||
|
||||
//4.购物车修改数量
|
||||
@Override
|
||||
public void updateCartByCid(String cid, String price, String cnum) throws SQLException {
|
||||
|
||||
//1.将对应的 cnum 和 price 转换成对应的大数据类型
|
||||
BigDecimal cnumbig = new BigDecimal(cnum);
|
||||
BigDecimal prciebig = new BigDecimal(price);
|
||||
|
||||
//2.进行小计计算
|
||||
BigDecimal count = prciebig.multiply(cnumbig);
|
||||
|
||||
//3.数据库中修改
|
||||
CartDao cartDao = new CartDaoImpl();
|
||||
cartDao.updateByCid(count, cnumbig, cid);
|
||||
|
||||
}
|
||||
|
||||
//5.清空购物车
|
||||
@Override
|
||||
public void clearCartByUid(String uid) throws SQLException {
|
||||
|
||||
CartDao cartDao = new CartDaoImpl();
|
||||
cartDao.clearCartByUid(uid);
|
||||
|
||||
}
|
||||
}
|
34
src/com/qf/service/impl/ProductServiceImpl.java
Normal file
34
src/com/qf/service/impl/ProductServiceImpl.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package com.qf.service.impl;
|
||||
|
||||
import com.qf.dao.ProductDao;
|
||||
import com.qf.dao.impl.ProductDaoImpl;
|
||||
import com.qf.entity.PageBean;
|
||||
import com.qf.entity.Product;
|
||||
import com.qf.service.ProductService;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class ProductServiceImpl implements ProductService {
|
||||
@Override
|
||||
public PageBean<Product> findPage(String tid, int page, int pageSize) throws SQLException {
|
||||
ProductDao productDao = new ProductDaoImpl();
|
||||
//1.查询有多少条数据
|
||||
long count = productDao.selectCountByTid(tid);
|
||||
|
||||
//
|
||||
List<Product> list = productDao.selectProductByPage(page, pageSize, tid);
|
||||
|
||||
return new PageBean<Product>(list, page, pageSize, count);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Product findProductByPid(String pid) throws SQLException {
|
||||
//1.先到数据库中进行商品查询
|
||||
ProductDao productDao = new ProductDaoImpl();
|
||||
//2.定义一个productdao里面对应的方法,返回product
|
||||
Product product = productDao.selectProductByPid(pid);
|
||||
//3.返回product信息
|
||||
return product;
|
||||
}
|
||||
}
|
20
src/com/qf/service/impl/TypeServiceImpl.java
Normal file
20
src/com/qf/service/impl/TypeServiceImpl.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package com.qf.service.impl;
|
||||
|
||||
import com.qf.dao.TypeDao;
|
||||
import com.qf.dao.impl.TypeDaoImpl;
|
||||
import com.qf.entity.Type;
|
||||
import com.qf.service.TypeService;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
|
||||
public class TypeServiceImpl implements TypeService {
|
||||
|
||||
@Override
|
||||
public List<Type> findAll() throws SQLException {
|
||||
//这里调用TypeDao接口(Dao层)
|
||||
TypeDao typeDao = new TypeDaoImpl();
|
||||
List<Type> types = typeDao.selectAll();
|
||||
return types;
|
||||
}
|
||||
}
|
52
src/com/qf/service/impl/UserServiceImpl.java
Normal file
52
src/com/qf/service/impl/UserServiceImpl.java
Normal file
@@ -0,0 +1,52 @@
|
||||
package com.qf.service.impl;
|
||||
|
||||
import com.qf.dao.UserDao;
|
||||
import com.qf.dao.impl.UserDaoImpl;
|
||||
import com.qf.entity.User;
|
||||
import com.qf.service.UserService;
|
||||
import com.qf.utils.MD5Utils;
|
||||
|
||||
import java.sql.SQLException;
|
||||
|
||||
public class UserServiceImpl implements UserService {
|
||||
//查询用户名是否存在
|
||||
@Override
|
||||
public boolean checkedUser(String username) throws SQLException {
|
||||
|
||||
//根据dao访问对象
|
||||
UserDao userDao = new UserDaoImpl();
|
||||
User user = userDao.selectUserByUname(username);
|
||||
|
||||
//处理返回值
|
||||
if (user != null) {
|
||||
return true;
|
||||
}
|
||||
|
||||
//没有查询到
|
||||
return false;
|
||||
}
|
||||
|
||||
//注册业务逻辑
|
||||
@Override
|
||||
public int registerUser(User user) throws SQLException {
|
||||
UserDao userDao = new UserDaoImpl();
|
||||
int row = userDao.insertUser(user);
|
||||
return row;
|
||||
}
|
||||
|
||||
//登录的业务逻辑
|
||||
@Override
|
||||
public User login(String username, String password) throws SQLException {
|
||||
//1.密码加密处理(数据库中密码已加密处理)便于比较
|
||||
String md5password = MD5Utils.md5(password);
|
||||
//2.根据用户名查询用户
|
||||
UserDao userDao = new UserDaoImpl();
|
||||
User user = userDao.selectUserByUname(username);
|
||||
//3.账号密码对比(正确返回user)
|
||||
if (user != null && user.getUpassword().equals(md5password)) {
|
||||
return user;
|
||||
}
|
||||
//错误返回空 null
|
||||
return null;
|
||||
}
|
||||
}
|
16
src/com/qf/utils/Base64Utils.java
Normal file
16
src/com/qf/utils/Base64Utils.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package com.qf.utils;
|
||||
|
||||
import java.util.Base64;
|
||||
|
||||
//base64 加密 解密 激活邮件的时候 为 邮箱地址 code验证码 进行加密
|
||||
//当 回传回来后 进行邮箱地址 和 code 的解密
|
||||
public class Base64Utils {
|
||||
//加密
|
||||
public static String encode(String msg){
|
||||
return Base64.getEncoder().encodeToString(msg.getBytes());
|
||||
}
|
||||
//解密
|
||||
public static String decode(String msg){
|
||||
return new String(Base64.getDecoder().decode(msg));
|
||||
}
|
||||
}
|
43
src/com/qf/utils/C3P0Utils.java
Normal file
43
src/com/qf/utils/C3P0Utils.java
Normal file
@@ -0,0 +1,43 @@
|
||||
package com.qf.utils;
|
||||
|
||||
import com.mchange.v2.c3p0.ComboPooledDataSource;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.Connection;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
|
||||
public class C3P0Utils {
|
||||
//获取数据源 C3P0配置文件信息 自动获取
|
||||
private static DataSource ds = new ComboPooledDataSource();
|
||||
//对外提供一个get方法 可以通过外部访问到DataSource
|
||||
public static DataSource getDataSource(){
|
||||
return ds;
|
||||
}
|
||||
//获取连接
|
||||
public static Connection getConnection(){
|
||||
try {
|
||||
return ds.getConnection();
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException("服务器繁忙....");
|
||||
}
|
||||
}
|
||||
//释放资源
|
||||
public static void release(ResultSet rs,Statement stmt,Connection conn){
|
||||
try {
|
||||
if(rs!=null){
|
||||
rs.close();
|
||||
}
|
||||
if(stmt!=null){
|
||||
stmt.close();
|
||||
}
|
||||
if(conn!=null){
|
||||
conn.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
49
src/com/qf/utils/Constants.java
Normal file
49
src/com/qf/utils/Constants.java
Normal file
@@ -0,0 +1,49 @@
|
||||
package com.qf.utils;
|
||||
|
||||
|
||||
/**
|
||||
* 项目的常量类
|
||||
*/
|
||||
public class Constants {
|
||||
//声明method标识
|
||||
public static final String TAG = "method";
|
||||
|
||||
public static final String FORWARD = "forward:";
|
||||
|
||||
public static final String REDIRECT="redirect:";
|
||||
|
||||
public static final String FLAG=":";
|
||||
|
||||
public static final String INDEX="index";
|
||||
|
||||
/*
|
||||
定义用户模块涉及的常量
|
||||
*/
|
||||
public static final String HAS_USER="1";
|
||||
|
||||
public static String NOT_HAS_USER = "0";
|
||||
|
||||
//用户的状态
|
||||
public static final String USER_ACTIVE ="1";
|
||||
|
||||
public static final String USER_NOT_ACTIVE = "0";
|
||||
|
||||
//角色
|
||||
public static final int ROLE_CUSTOMER = 0;//用户
|
||||
|
||||
public static final int ROLE_ADMIN= 1;//管理员
|
||||
|
||||
/**
|
||||
* 用户模块激活状态
|
||||
*/
|
||||
public static final int ACTIVE_FAIL= 0;
|
||||
public static final int ACTIVE_SUCCESS= 1;
|
||||
public static final int ACTIVE_ALREADY= 2;
|
||||
|
||||
/**
|
||||
* 自动登录cookie名
|
||||
*/
|
||||
public static final String AUTO_NAME="autoUser";
|
||||
|
||||
|
||||
}
|
95
src/com/qf/utils/EmailUtils.java
Normal file
95
src/com/qf/utils/EmailUtils.java
Normal file
@@ -0,0 +1,95 @@
|
||||
package com.qf.utils;
|
||||
|
||||
|
||||
|
||||
import com.qf.entity.User;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
import javax.mail.Session;
|
||||
import javax.mail.Transport;
|
||||
import javax.mail.internet.InternetAddress;
|
||||
import javax.mail.internet.MimeMessage;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.Date;
|
||||
import java.util.Properties;
|
||||
|
||||
/*
|
||||
* 1.首先需要获取发送邮件的Session对象
|
||||
* Session session = Session.getDefaultInstance(Properties prop)
|
||||
* 2.使用session对象 获取待发送的邮件信息
|
||||
* MimeMessage mime = new MimeMessage(session)
|
||||
* 3.设置发件人 收件人 标题 邮件内容 附件 发送时间等等
|
||||
* 4.利用Transport 发送邮件
|
||||
* */
|
||||
public class EmailUtils {
|
||||
public static void sendEmail(User user){
|
||||
//发送方
|
||||
String myAccount = "cqjava1701@163.com";
|
||||
//授权码
|
||||
String myPass = "cq1701";
|
||||
//发件人 邮箱的 SMTP 服务器地址
|
||||
String SMTPHost = "smtp.163.com";
|
||||
//组成 properties
|
||||
Properties prop = new Properties();
|
||||
prop.setProperty("mail.transport.protocol", "smtp");//设置协议类型
|
||||
prop.setProperty("mail.smtp.host", SMTPHost);//定义发件人的邮箱服务器地址
|
||||
prop.setProperty("mail.smtp.auth", "true");//设置请求验证
|
||||
//1.Session对象 创建会话 用于和邮箱服务器进行交互
|
||||
Session session = Session.getDefaultInstance(prop);
|
||||
//设置debug模式 可以查看详细发送信息 可略
|
||||
session.setDebug(true);
|
||||
|
||||
//2.创建方法 用来组成一封完整的邮件
|
||||
//参数 session(参数配置), myAccount 发送方 , user.getEmail() 接收方
|
||||
MimeMessage message = createMsg(session,myAccount,user);
|
||||
//4.利用Transport 发送邮件
|
||||
try {
|
||||
Transport tran = session.getTransport();
|
||||
//连接服务器 确认发送方 是否授权
|
||||
tran.connect(myAccount, myPass);
|
||||
//发送邮件 将message 对象 传给 Transport 对象 将邮件发送出去
|
||||
//参数1 要发的内容 参数2 要给哪些人发
|
||||
//message.getAllRecipients() 获取到所有的收件人 | 抄送 | 密送
|
||||
tran.sendMessage(message, message.getAllRecipients());
|
||||
//关闭连接
|
||||
tran.close();
|
||||
} catch (MessagingException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static MimeMessage createMsg(Session session, String myAccount, User user) {
|
||||
//使用session对象 获取待发送的邮件信息
|
||||
MimeMessage message = new MimeMessage(session);
|
||||
//3.设置发件人 收件人 标题 邮件内容 附件 发送时间等等
|
||||
try {
|
||||
//3.1发件人 from
|
||||
message.setFrom(new InternetAddress(myAccount, "小米", "utf-8"));
|
||||
//3.2收件人 to 支持可以添加多个收件人 | 抄送 | 密送 如果想要发送给多个人 可以重复下面代码多次
|
||||
/*
|
||||
* MimeMessage.RecipientType.TO 发送
|
||||
* MimeMessage.RecipientType.CC 抄送
|
||||
* MimeMessage.RecipientType.BCC 密送
|
||||
* */
|
||||
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
|
||||
//3.3生成邮件主题
|
||||
message.setSubject("小米商城账号激活邮件","utf-8");
|
||||
String ip = Inet4Address.getLocalHost().getHostAddress();
|
||||
String url = "http://"+ip+":8080/activate?e="+ Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getCode());
|
||||
//设置邮件正文 setContent 可以使用html标签
|
||||
message.setContent(user.getUsername()+",你好<br>欢迎注册小米商城! 请点击链接进行激活:<a href='"+url+"'>"+url+"</a>","text/html;charset=utf-8");
|
||||
//设置邮件的发送时间 是立即发送
|
||||
message.setSentDate(new Date());
|
||||
//保存设置
|
||||
message.saveChanges();
|
||||
} catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return message;
|
||||
}
|
||||
}
|
24
src/com/qf/utils/MD5Utils.java
Normal file
24
src/com/qf/utils/MD5Utils.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package com.qf.utils;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
//MD5 生成器
|
||||
public class MD5Utils {
|
||||
public static String md5(String password){
|
||||
//生成一个md5加密器
|
||||
try {
|
||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||
//计算MD5 的值
|
||||
md.update(password.getBytes());
|
||||
//BigInteger 将8位的字符串 转成16位的字符串 得到的字符串形式是哈希码值
|
||||
//BigInteger(参数1,参数2) 参数1 是 1为正数 0为0 -1为负数
|
||||
return new BigInteger(1, md.digest()).toString(16);
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
214
src/com/qf/utils/PaymentUtil.java
Normal file
214
src/com/qf/utils/PaymentUtil.java
Normal file
@@ -0,0 +1,214 @@
|
||||
package com.qf.utils;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class PaymentUtil {
|
||||
|
||||
private static String encodingCharset = "UTF-8";
|
||||
|
||||
/**
|
||||
* 生成hmac方法
|
||||
*
|
||||
* @param p0_Cmd 业务类型
|
||||
* @param p1_MerId 商户编号
|
||||
* @param p2_Order 商户订单号
|
||||
* @param p3_Amt 支付金额
|
||||
* @param p4_Cur 交易币种
|
||||
* @param p5_Pid 商品名称
|
||||
* @param p6_Pcat 商品种类
|
||||
* @param p7_Pdesc 商品描述
|
||||
* @param p8_Url 商户接收支付成功数据的地址
|
||||
* @param p9_SAF 送货地址
|
||||
* @param pa_MP 商户扩展信息
|
||||
* @param pd_FrpId 银行编码
|
||||
* @param pr_NeedResponse 应答机制
|
||||
* @param keyValue 商户密钥
|
||||
* @return
|
||||
*/
|
||||
public static String buildHmac(String p0_Cmd,String p1_MerId,
|
||||
String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat,
|
||||
String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId,
|
||||
String pr_NeedResponse,String keyValue) {
|
||||
StringBuilder sValue = new StringBuilder();
|
||||
// 业务类型
|
||||
sValue.append(p0_Cmd);
|
||||
// 商户编号
|
||||
sValue.append(p1_MerId);
|
||||
// 商户订单号
|
||||
sValue.append(p2_Order);
|
||||
// 支付金额
|
||||
sValue.append(p3_Amt);
|
||||
// 交易币种
|
||||
sValue.append(p4_Cur);
|
||||
// 商品名称
|
||||
sValue.append(p5_Pid);
|
||||
// 商品种类
|
||||
sValue.append(p6_Pcat);
|
||||
// 商品描述
|
||||
sValue.append(p7_Pdesc);
|
||||
// 商户接收支付成功数据的地址
|
||||
sValue.append(p8_Url);
|
||||
// 送货地址
|
||||
sValue.append(p9_SAF);
|
||||
// 商户扩展信息
|
||||
sValue.append(pa_MP);
|
||||
// 银行编码
|
||||
sValue.append(pd_FrpId);
|
||||
// 应答机制
|
||||
sValue.append(pr_NeedResponse);
|
||||
|
||||
return PaymentUtil.hmacSign(sValue.toString(), keyValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回校验hmac方法
|
||||
*
|
||||
* @param hmac 支付网关发来的加密验证码
|
||||
* @param p1_MerId 商户编号
|
||||
* @param r0_Cmd 业务类型
|
||||
* @param r1_Code 支付结果
|
||||
* @param r2_TrxId 易宝支付交易流水号
|
||||
* @param r3_Amt 支付金额
|
||||
* @param r4_Cur 交易币种
|
||||
* @param r5_Pid 商品名称
|
||||
* @param r6_Order 商户订单号
|
||||
* @param r7_Uid 易宝支付会员ID
|
||||
* @param r8_MP 商户扩展信息
|
||||
* @param r9_BType 交易结果返回类型
|
||||
* @param keyValue 密钥
|
||||
* @return
|
||||
*/
|
||||
public static boolean verifyCallback(String hmac, String p1_MerId,
|
||||
String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt,
|
||||
String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid,
|
||||
String r8_MP, String r9_BType, String keyValue) {
|
||||
StringBuilder sValue = new StringBuilder();
|
||||
// 商户编号
|
||||
sValue.append(p1_MerId);
|
||||
// 业务类型
|
||||
sValue.append(r0_Cmd);
|
||||
// 支付结果
|
||||
sValue.append(r1_Code);
|
||||
// 易宝支付交易流水号
|
||||
sValue.append(r2_TrxId);
|
||||
// 支付金额
|
||||
sValue.append(r3_Amt);
|
||||
// 交易币种
|
||||
sValue.append(r4_Cur);
|
||||
// 商品名称
|
||||
sValue.append(r5_Pid);
|
||||
// 商户订单号
|
||||
sValue.append(r6_Order);
|
||||
// 易宝支付会员ID
|
||||
sValue.append(r7_Uid);
|
||||
// 商户扩展信息
|
||||
sValue.append(r8_MP);
|
||||
// 交易结果返回类型
|
||||
sValue.append(r9_BType);
|
||||
String sNewString = PaymentUtil.hmacSign(sValue.toString(), keyValue);
|
||||
return sNewString.equals(hmac);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param aValue
|
||||
* @param aKey
|
||||
* @return
|
||||
*/
|
||||
public static String hmacSign(String aValue, String aKey) {
|
||||
byte k_ipad[] = new byte[64];
|
||||
byte k_opad[] = new byte[64];
|
||||
byte keyb[];
|
||||
byte value[];
|
||||
try {
|
||||
keyb = aKey.getBytes(encodingCharset);
|
||||
value = aValue.getBytes(encodingCharset);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
keyb = aKey.getBytes();
|
||||
value = aValue.getBytes();
|
||||
}
|
||||
|
||||
Arrays.fill(k_ipad, keyb.length, 64, (byte) 54);
|
||||
Arrays.fill(k_opad, keyb.length, 64, (byte) 92);
|
||||
for (int i = 0; i < keyb.length; i++) {
|
||||
k_ipad[i] = (byte) (keyb[i] ^ 0x36);
|
||||
k_opad[i] = (byte) (keyb[i] ^ 0x5c);
|
||||
}
|
||||
|
||||
MessageDigest md = null;
|
||||
try {
|
||||
md = MessageDigest.getInstance("MD5");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
|
||||
return null;
|
||||
}
|
||||
md.update(k_ipad);
|
||||
md.update(value);
|
||||
byte dg[] = md.digest();
|
||||
md.reset();
|
||||
md.update(k_opad);
|
||||
md.update(dg, 0, 16);
|
||||
dg = md.digest();
|
||||
return toHex(dg);
|
||||
}
|
||||
|
||||
public static String toHex(byte input[]) {
|
||||
if (input == null)
|
||||
return null;
|
||||
StringBuffer output = new StringBuffer(input.length * 2);
|
||||
for (int i = 0; i < input.length; i++) {
|
||||
int current = input[i] & 0xff;
|
||||
if (current < 16)
|
||||
output.append("0");
|
||||
output.append(Integer.toString(current, 16));
|
||||
}
|
||||
|
||||
return output.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param args
|
||||
* @param key
|
||||
* @return
|
||||
*/
|
||||
public static String getHmac(String[] args, String key) {
|
||||
if (args == null || args.length == 0) {
|
||||
return (null);
|
||||
}
|
||||
StringBuffer str = new StringBuffer();
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
str.append(args[i]);
|
||||
}
|
||||
return (hmacSign(str.toString(), key));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param aValue
|
||||
* @return
|
||||
*/
|
||||
public static String digest(String aValue) {
|
||||
aValue = aValue.trim();
|
||||
byte value[];
|
||||
try {
|
||||
value = aValue.getBytes(encodingCharset);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
value = aValue.getBytes();
|
||||
}
|
||||
MessageDigest md = null;
|
||||
try {
|
||||
md = MessageDigest.getInstance("SHA");
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
return toHex(md.digest(value));
|
||||
|
||||
}
|
||||
|
||||
// public static void main(String[] args) {
|
||||
// System.out.println(hmacSign("AnnulCard1000043252120080620160450.0http://localhost/SZXpro/callback.asp杩?4564868265473632445648682654736324511","8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t"));
|
||||
// }
|
||||
}
|
21
src/com/qf/utils/RandomUtils.java
Normal file
21
src/com/qf/utils/RandomUtils.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package com.qf.utils;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
import java.util.Random;
|
||||
|
||||
//生成邮箱验证 激活码 使用的随机数
|
||||
public class RandomUtils {
|
||||
//当前时间 + 随机数
|
||||
public static String createActive(){
|
||||
|
||||
return getTime()+Integer.toHexString(new Random().nextInt(900)+100);
|
||||
}
|
||||
public static String getTime(){
|
||||
return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime());
|
||||
}
|
||||
//生成订单编号
|
||||
public static String createOrderId(){
|
||||
return getTime();
|
||||
}
|
||||
}
|
17
src/com/qf/utils/StrUtils.java
Normal file
17
src/com/qf/utils/StrUtils.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package com.qf.utils;
|
||||
//字符串工具类 判定字符串是否为空
|
||||
public class StrUtils {
|
||||
public static boolean empty(String msg){
|
||||
return msg!=null && msg.length()>0;
|
||||
}
|
||||
public static boolean empty(String...msg){
|
||||
boolean res = true;
|
||||
for(String s:msg){
|
||||
res = (s!=null && s.length()>0);
|
||||
if(!res){
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user