基于javaweb+mysql的springboot在线电子商城管理系统(java+springboot+thymeleaf+bootstrap+thymeleaf+html+layui+maven+mysql)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot在线电子商城管理系统(java+springboot+thymeleaf+bootstrap+thymeleaf+html+layui+maven+mysql)
项目介绍
本项目分为管理员与普通用户两种角色, 管理员角色包含以下功能: 发货,后台登录后首页,商品管理,商城类别增删改查,用户管理,管理员登录,订单管理,资料截图,首页等功能。 用户角色包含以下功能:
查看分类,加入购物车,提交订单,查看商品详情,查看订单,用户登录等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven项目:是;
技术栈
-
后端:SpringBoot+Thymeleaf
-
前端:HTML+CSS+JavaScript+bootstrap+jQuery+layui
使用说明
-
使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
-
使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
- 将项目中application.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,在浏览器中输入http://localhost:8082/mall/ 登录 普通用户账号密码: me/123456
管理员账号密码: admin/admin
/**
* 权限拦截器
*
*/
@WebFilter
public class AuthorizationFilter implements Filter {
public AuthorizationFilter() {
}
private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationFilter.class);
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
// 支持跨域访问
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,X-Custom-Header");
response.setHeader("X-Powered-By", "SpringBoot");
if ("option".equalsIgnoreCase(request.getMethod())) {
responseJSON(response, new HashMap<>());
return;
}
//除了拦截login.html 其他html都拦截
StringBuffer url = request.getRequestURL();
//System.out.println(url);
String path = url.toString();
// 只拦截这些类型请求
if (path.endsWith(".do") || path.endsWith(".html")) {
// 登录,图片不拦截
if (path.endsWith("login.html")
|| path.endsWith("toRegister.html")
|| path.endsWith("register.do")
@RequestMapping("/get.html")
public String toProductPage(int id, Map<String, Object> map) {
Product product = productService.findById(id);
map.put("product", product);
return "mall/product/info";
}
/**
* 查找热门商品
*
* @return
*/
@ResponseBody
@RequestMapping("/hot.do")
public ResultBean<List<Product>> getHotProduct() {
List<Product> products = productService.findHotProduct();
return new ResultBean<>(products);
}
/**
* 查找最新商品
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/new.do")
public ResultBean<List<Product>> getNewProduct(int pageNo, int pageSize) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findNewProduct(pageable);
return new ResultBean<>(products);
}
/**
* 打开分类查看商品页面
*
* @return
*/
@RequestMapping("/category.html")
public String toCatePage(int cid, Map<String, Object> map) {
Classification classification = classificationService.findById(cid);
map.put("category", classification);
return "mall/product/category";
}
@RequestMapping("/toCart.html")
public String toCart(){
@ResponseBody
public ResultBean<String> defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
e.printStackTrace();
ResultBean<String> r = new ResultBean<>(e);
r.setData(req.getRequestURI());
return r;
}
@ExceptionHandler(value = RuntimeException.class)
public void runtimeExceptionHandler(HttpServletRequest req, HttpServletResponse res, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
req.setAttribute("msg", e.getMessage());
//转发到error页面
req.getRequestDispatcher("/mall/user/error.html").forward(req, res);
}
/**
* 处理validation异常
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = ConstraintViolationException.class)
@ResponseBody
public ResultBean<String> validationExceptionHandler(HttpServletRequest req, ConstraintViolationException e) throws Exception {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
StringBuilder strBuilder = new StringBuilder();
for (ConstraintViolation<?> violation : violations) {
strBuilder.append(violation.getMessage() + ",");
}
LOGGER.error(strBuilder.toString(), e);
ResultBean<String> r = new ResultBean(strBuilder.toString());
r.setData(req.getRequestURI());
return r;
}
}
package priv.jesse.mall.web.admin;
private AdminUserService adminUserService;
/**
* 访问首页
*
* @return
*/
@RequestMapping("/index")
public String toIndex() {
return "admin/index";
}
/**
* 访问登录页面
*
* @return
*/
@RequestMapping("/login.html")
public String toLogin() {
return "admin/login";
}
/**
* 登录请求
*
* @param username
* @param password
*/
//@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/login.do")
public void login(String username, String password, HttpServletRequest request, HttpServletResponse response) throws IOException {
AdminUser adminUser = adminUserService.checkLogin(request, username, password);
response.sendRedirect("/mall/admin/index.html");
}
/**
* 退出登录
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("login_user");
response.sendRedirect("login.html");
}
}
package priv.jesse.mall.service.impl;
public ResultBean<List<Classification>> getCategorySec(int cid){
List<Classification> list = classificationService.findByParentId(cid);
return new ResultBean<>(list);
}
/**
* 加购物车
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/addCart.do")
public ResultBean<Boolean> addToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.addCart(productId, request);
return new ResultBean<>(true);
}
/**
* 移除购物车
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/delCart.do")
public ResultBean<Boolean> delToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.remove(productId, request);
return new ResultBean<>(true);
}
/**
* 查看购物车商品
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/listCart.do")
public ResultBean<List<OrderItem>> listCart(HttpServletRequest request) throws Exception {
List<OrderItem> orderItems = shopCartService.listCart(request);
return new ResultBean<>(orderItems);
}
/**
* 支付
* @param orderId
*/
void pay(int orderId);
/**
* 提交订单
* @param name
* @param phone
* @param addr
* @param request
* @param response
*/
void submit(String name, String phone, String addr, HttpServletRequest request, HttpServletResponse response) throws Exception;
/**
* 确认收货
* @param orderId
*/
void receive(int orderId);
}
package priv.jesse.mall.web.admin;
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminUserService adminUserService;
/**
* 访问首页
*
* @return
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("user");
response.sendRedirect("/mall/index.html");
}
/**
* 验证用户名是否唯一
* @param username
* @return
*/
@ResponseBody
@RequestMapping("/checkUsername.do")
public ResultBean<Boolean> checkUsername(String username){
List<User> users = userService.findByUsername(username);
if (users==null||users.isEmpty()){
return new ResultBean<>(true);
}
return new ResultBean<>(false);
}
/**
* 如发生错误 转发到这页面
*
* @param response
* @param request
* @return
*/
@RequestMapping("/error.html")
public String error(HttpServletResponse response, HttpServletRequest request) {
return "error";
}
}
package priv.jesse.mall.aspect;
Product product = productService.findById(id);
map.put("product", product);
return "mall/product/info";
}
/**
* 查找热门商品
*
* @return
*/
@ResponseBody
@RequestMapping("/hot.do")
public ResultBean<List<Product>> getHotProduct() {
List<Product> products = productService.findHotProduct();
return new ResultBean<>(products);
}
/**
* 查找最新商品
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/new.do")
public ResultBean<List<Product>> getNewProduct(int pageNo, int pageSize) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findNewProduct(pageable);
return new ResultBean<>(products);
}
/**
* 打开分类查看商品页面
*
* @return
*/
@RequestMapping("/category.html")
public String toCatePage(int cid, Map<String, Object> map) {
Classification classification = classificationService.findById(cid);
map.put("category", classification);
return "mall/product/category";
}
@RequestMapping("/toCart.html")
public String toCart(){
return "mall/product/cart";
}
/**
* 按一级分类查找商品
*
* @param cid
* @param pageNo
}
}
/**
* 查看购物车
*
* 查询出session的List中所有的商品Id,并封装成List<OrderItem>返回
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
return new ArrayList<>();
}
// 遍历List中的商品id,每个商品Id对应一个OrderItem
for (Integer productId : productIds) {
if (productMap.get(productId) == null) {
Product product = productService.findById(productId);
OrderItem orderItem = new OrderItem();
orderItem.setProduct(product);
orderItem.setProductId(productId);
orderItem.setCount(1);
orderItem.setSubTotal(product.getShopPrice());
productMap.put(productId, orderItem);
} else {
OrderItem orderItem = productMap.get(productId);
int count = orderItem.getCount();
orderItem.setCount(++count);
Double subTotal = orderItem.getSubTotal();
orderItem.setSubTotal(orderItem.getSubTotal()+subTotal);
productMap.put(productId, orderItem);
}
}
List<OrderItem> orderItems = new ArrayList<>(productMap.values());
return orderItems;
}
}
package priv.jesse.mall.web.user;
}
package priv.jesse.mall.web.user;
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@Autowired
private ShopCartService shopCartService;
/**
* 获取商品信息
*
* @param id
* @return
*/
@RequestMapping("/get.do")
public ResultBean<Product> getProduct(int id) {
Product product = productService.findById(id);
return new ResultBean<>(product);
}
/**
* 打开商品详情页面
*
* @param id
// 注册完成后重定向到登录页面
response.sendRedirect("/mall/user/login.html");
}
/**
* 登出
*/
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("user");
response.sendRedirect("/mall/index.html");
}
/**
* 验证用户名是否唯一
* @param username
* @return
*/
@ResponseBody
@RequestMapping("/checkUsername.do")
public ResultBean<Boolean> checkUsername(String username){
List<User> users = userService.findByUsername(username);
if (users==null||users.isEmpty()){
return new ResultBean<>(true);
}
return new ResultBean<>(false);
}
/**
* 如发生错误 转发到这页面
*
* @param response
* @param request
* @return
*/
@RequestMapping("/error.html")
public String error(HttpServletResponse response, HttpServletRequest request) {
return "error";
}
}
package priv.jesse.mall.aspect;
* 根据Id删除
*
* @param id
* @return
*/
void delById(int id);
/**
* 检查登录
* @param request
* @param username
* @param pwd
* @return
*/
AdminUser checkLogin(HttpServletRequest request,String username, String pwd);
}
package priv.jesse.mall.service;
/**
* 购物车
*/
public interface ShopCartService {
String NAME_PREFIX = "shop_cart_";
/**
* 加购物车
* @param
*/
void addCart(int productId, HttpServletRequest request) throws Exception;
/**
* 移除
* @param productId
* @param request
*/
void remove(int productId, HttpServletRequest request) throws Exception;
/**
* 查看购物车
* @param request
* @return
*/
List<OrderItem> listCart(HttpServletRequest request) throws Exception;
}
package priv.jesse.mall.web.user;
return new ResultBean<>(users);
}
@ResponseBody
@RequestMapping("/getTotal.do")
public ResultBean<Integer> geTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) userService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
userService.delById(id);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id,String username,
String password,String name,
String phone,String email,
String addr) {
// 更新前先查询
User user = userService.findById(id);
user.setId(id);
user.setName(name);
user.setUsername(username);
user.setPassword(password);
user.setAddr(addr);
user.setEmail(email);
user.setPhone(phone);
userService.update(user);
return new ResultBean<>(true);
}
}
package priv.jesse.mall.web.user;
user.setEmail(email);
user.setPhone(phone);
userService.update(user);
return new ResultBean<>(true);
}
}
package priv.jesse.mall.web.user;
@Controller
@RequestMapping("/order")
public class OrderController {
@Autowired
private OrderService orderService;
/**
* 打开订单列表页面
*
* @return
*/
@RequestMapping("/toList.html")
public String toOrderList() {
return "mall/order/list";
}
/**
* 查询用户订单列表
*
* @param request
* @return
*/
@RequestMapping("/list.do")
@ResponseBody
public ResultBean<List<Order>> listData(HttpServletRequest request) {
List<Order> orders = orderService.findUserOrder(request);
return new ResultBean<>(orders);
}
/**
* 查询订单详情
@RequestMapping("/categorySec.do")
public ResultBean<List<Product>> getCategorySecProduct(int csId, int pageNo, int pageSize) {
Pageable pageable = new PageRequest(pageNo, pageSize);
List<Product> products = productService.findByCsid(csId, pageable);
return new ResultBean<>(products);
}
/**
* 根据一级分类查询它所有的二级分类
* @param cid
* @return
*/
@ResponseBody
@RequestMapping("/getCategorySec.do")
public ResultBean<List<Classification>> getCategorySec(int cid){
List<Classification> list = classificationService.findByParentId(cid);
return new ResultBean<>(list);
}
/**
* 加购物车
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/addCart.do")
public ResultBean<Boolean> addToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.addCart(productId, request);
return new ResultBean<>(true);
}
/**
* 移除购物车
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/delCart.do")
public ResultBean<Boolean> delToCart(int productId, HttpServletRequest request) throws Exception {
shopCartService.remove(productId, request);
return new ResultBean<>(true);
}
/**
* 查看购物车商品
* @param request
if (path.endsWith("login.html")
|| path.endsWith("toRegister.html")
|| path.endsWith("register.do")
|| path.endsWith("login.do")
|| path.endsWith("logout.do")
|| path.endsWith("error.html")
|| path.endsWith("checkUsername.do")
|| path.contains("/mall/admin/product/img/")
|| path.endsWith("index.html")
|| path.endsWith("classification/list.do")
|| path.contains("product")
|| path.contains("/mall/h2-console")) {
chain.doFilter(request, response);
} else {
processAccessControl(request, response, chain);
}
} else {
//其他静态资源都不拦截
chain.doFilter(request, response);
}
}
/**
* @param request
* @param response
* @param chain
* @throws IOException
* @throws ServletException
*/
private void processAccessControl(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
Object adminUser = request.getSession().getAttribute("login_user");
Object user = request.getSession().getAttribute("user");
String url = request.getRequestURL().toString();
if (url.indexOf("admin") != -1){
if (adminUser == null) {
response.sendRedirect("/mall/admin/login.html");
}else {
chain.doFilter(request, response);
}
//其他静态资源都不拦截
chain.doFilter(request, response);
}
}
/**
* @param request
* @param response
* @param chain
* @throws IOException
* @throws ServletException
*/
private void processAccessControl(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
Object adminUser = request.getSession().getAttribute("login_user");
Object user = request.getSession().getAttribute("user");
String url = request.getRequestURL().toString();
if (url.indexOf("admin") != -1){
if (adminUser == null) {
response.sendRedirect("/mall/admin/login.html");
}else {
chain.doFilter(request, response);
}
}else {
if (user == null) {
response.sendRedirect("/mall/user/login.html");
}else {
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
}
/**
* 返回JOSN数据格式
*
* @param response
* @param object
* @throws IOException
*/
public static void responseJSON(HttpServletResponse response, Object object) throws IOException {
response.setContentType("application/json;charset=utf-8");
response.setCharacterEncoding("UTF-8");
ObjectMapper mapper = new ObjectMapper();
if (object == null)
return;
String jsonStr = mapper.writeValueAsString(object);
* 登出
*/
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("user");
response.sendRedirect("/mall/index.html");
}
/**
* 验证用户名是否唯一
* @param username
* @return
*/
@ResponseBody
@RequestMapping("/checkUsername.do")
public ResultBean<Boolean> checkUsername(String username){
List<User> users = userService.findByUsername(username);
if (users==null||users.isEmpty()){
return new ResultBean<>(true);
}
return new ResultBean<>(false);
}
/**
* 如发生错误 转发到这页面
*
* @param response
* @param request
* @return
*/
@RequestMapping("/error.html")
public String error(HttpServletResponse response, HttpServletRequest request) {
return "error";
}
}
package priv.jesse.mall.aspect;
@Override
public void addCart(int productId, HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
if (productIds == null) {
productIds = new ArrayList<>();
request.getSession().setAttribute(NAME_PREFIX + loginUser.getId(), productIds);
}
productIds.add(productId);
}
/**
* 移除
*
* 移除session List中对应的商品Id
*
* @param productId
* @param request
*/
@Override
public void remove(int productId, HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
Iterator<Integer> iterator = productIds.iterator();
while (iterator.hasNext()) {
if (productId == iterator.next()) {
iterator.remove();
}
}
}
/**
* 查看购物车
*
* 查询出session的List中所有的商品Id,并封装成List<OrderItem>返回
*
out.write(jsonStr.getBytes("UTF-8"));
out.flush();
}
}
package priv.jesse.mall.web.admin;
@Controller
@RequestMapping("/admin/classification")
public class AdminClassificationController {
@Autowired
private ClassificationService classificationService;
/**
* 返回列表页面
*
* @param type
* @return
*/
@RequestMapping("/toList.html")
public String toList(int type) {
if (type == 1) {// 一级分类页面
return "admin/category/list";
} else if (type == 2) {// 二级分类页面
return "admin/categorysec/list";
} else {
return "";
}
}
/**
* 打开添加分类页面
if (productId == iterator.next()) {
iterator.remove();
}
}
}
/**
* 查看购物车
*
* 查询出session的List中所有的商品Id,并封装成List<OrderItem>返回
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
return new ArrayList<>();
}
// 遍历List中的商品id,每个商品Id对应一个OrderItem
for (Integer productId : productIds) {
if (productMap.get(productId) == null) {
Product product = productService.findById(productId);
OrderItem orderItem = new OrderItem();
orderItem.setProduct(product);
orderItem.setProductId(productId);
orderItem.setCount(1);
orderItem.setSubTotal(product.getShopPrice());
productMap.put(productId, orderItem);
} else {
OrderItem orderItem = productMap.get(productId);
int count = orderItem.getCount();
orderItem.setCount(++count);
Double subTotal = orderItem.getSubTotal();
orderItem.setSubTotal(orderItem.getSubTotal()+subTotal);
productMap.put(productId, orderItem);
}
}
List<OrderItem> orderItems = new ArrayList<>(productMap.values());
return orderItems;
/**
* 统一异常处理
* 在Controller中抛出的异常,GlobalExceptionHandler中定义的处理方法可以起作用
* 其他的业务层异常也可以单独处理
*
*/
@ControllerAdvice
public class GlobalExceptionHandler implements Serializable{
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 默认的异常处理
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultBean<String> defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
* @param request
*/
@Override
public void addCart(int productId, HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
if (productIds == null) {
productIds = new ArrayList<>();
request.getSession().setAttribute(NAME_PREFIX + loginUser.getId(), productIds);
}
productIds.add(productId);
}
/**
* 移除
*
* 移除session List中对应的商品Id
*
* @param productId
* @param request
*/
@Override
public void remove(int productId, HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
Iterator<Integer> iterator = productIds.iterator();
while (iterator.hasNext()) {
if (productId == iterator.next()) {
iterator.remove();
}
}
}
/**
* 查看购物车
*
* 查询出session的List中所有的商品Id,并封装成List<OrderItem>返回
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
*/
@RequestMapping("/login.html")
public String toLogin() {
return "admin/login";
}
/**
* 登录请求
*
* @param username
* @param password
*/
//@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/login.do")
public void login(String username, String password, HttpServletRequest request, HttpServletResponse response) throws IOException {
AdminUser adminUser = adminUserService.checkLogin(request, username, password);
response.sendRedirect("/mall/admin/index.html");
}
/**
* 退出登录
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/logout.do")
public void logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
request.getSession().removeAttribute("login_user");
response.sendRedirect("login.html");
}
}
package priv.jesse.mall.service.impl;
/**
* 查看购物车
*
* 查询出session的List中所有的商品Id,并封装成List<OrderItem>返回
*
* @param request
* @return
*/
@Override
public List<OrderItem> listCart(HttpServletRequest request) throws Exception {
User loginUser = (User) request.getSession().getAttribute("user");
if (loginUser == null)
throw new Exception("未登录!请重新登录");
List<Integer> productIds = (List<Integer>) request.getSession().getAttribute(NAME_PREFIX + loginUser.getId());
// key: productId value:OrderItem
Map<Integer, OrderItem> productMap = new HashMap<>();
if (productIds == null){
return new ArrayList<>();
}
// 遍历List中的商品id,每个商品Id对应一个OrderItem
for (Integer productId : productIds) {
if (productMap.get(productId) == null) {
Product product = productService.findById(productId);
OrderItem orderItem = new OrderItem();
orderItem.setProduct(product);
orderItem.setProductId(productId);
orderItem.setCount(1);
orderItem.setSubTotal(product.getShopPrice());
productMap.put(productId, orderItem);
} else {
OrderItem orderItem = productMap.get(productId);
int count = orderItem.getCount();
orderItem.setCount(++count);
Double subTotal = orderItem.getSubTotal();
orderItem.setSubTotal(orderItem.getSubTotal()+subTotal);
productMap.put(productId, orderItem);
}
}
List<OrderItem> orderItems = new ArrayList<>(productMap.values());
return orderItems;
}
}
package priv.jesse.mall.web.user;
for (OrderItem orderItem : list) {
Product product = productDao.findOne(orderItem.getProductId());
orderItem.setProduct(product);
}
return list;
}
/**
* 更改订单状态
*
* @param id
* @param status
*/
@Override
public void updateStatus(int id, int status) {
Order order = orderDao.findOne(id);
order.setState(status);
orderDao.save(order);
}
/**
* 查找用户的订单列表
*
* @param request
* @return
*/
@Override
public List<Order> findUserOrder(HttpServletRequest request) {
//从session中获取登录用户的id,查找他的订单
Object user = request.getSession().getAttribute("user");
if (user == null)
throw new LoginException("请登录!");
User loginUser = (User) user;
List<Order> orders = orderDao.findByUserId(loginUser.getId());
return orders;
}
/**
* 支付
*
* @param orderId
*/
@Override
public void pay(int orderId) {
//具体逻辑就不实现了,直接更改状态为 待发货
Order order = orderDao.findOne(orderId);
if (order == null)
throw new RuntimeException("订单不存在");
orderDao.updateState(STATE_WAITE_SEND,order.getId());
}