源码获取:博客首页 "资源" 里下载!
一、项目简述
本系统功能包括:
一:商品模块:商品添加、规格设置,商品上下架等
二:订单模块:下单、购物车、支付,发货、收货、退款 等
三:用户模块:登陆、注册等
四:其他等
二、项目运行
环境配置:
1.1 springframework4.3.7.RELEASE
1.2 mybatis3.1.0、MyBatis-Plus 3.1.0
1.3 shirol.3.2
1.4 servlet3.1.0
1.5 druid1.0.28
1.6 weixin-java-mp3.2.0
1.7 MybatisPlus3.1.0
1.8 lombok等等。
项目技术:
2.1 Vue2.5.1
2.2 iview
2.3 layer3.0.3
2.4 jquery2.2.4
2.5 bootstrap3.3.7等等。
订单管理控制层:
/**
* 订单管理控制层
*/
@Controller
public class OrderController {
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
@Autowired
private ProductService productService;
/**
* 去购物车页面
*/
@PostMapping("/toCart")
public String toDetail(HttpSession session, @RequestParam("id") Integer[] id, String buyNum, Model model) {
System.out.println("111111111111111:" + id[0]);
Integer buyCount = Integer.parseInt(buyNum);
List<Product> productList = productService.findProductsById(id);
Map<Product, Integer> cartMap = (Map<Product, Integer>) session.getAttribute("cart");
for (Product product : productList) {
cartMap.put(product, buyCount);
}
session.setAttribute("cart", cartMap);
session.setAttribute("buyCount", 0);
return "/pages/order/cart";
}
/**
* 去我的购物车
*/
@GetMapping("/toMyCart")
public String tocart() {
return "/pages/order/cart";
}
/**
* 从购物车删除
*/
@PostMapping("/toDelete")
public String toDelete(Integer productId, HttpSession session, Model model) {
Product product = productService.findProductById(productId);
System.out.println(product);
((Map<Product, Integer>) session.getAttribute("cart")).remove(product);
System.out.println("size:" + ((Map<Product, Integer>) session.getAttribute("cart")).size());
return "/pages/order/cart";
}
/**
* 去支付订单页面
*/
@PostMapping("/toOrder")
public String toOrder(HttpSession session, String[] buyNum, Model model,@RequestParam("id") Integer[] id,
@RequestParam("checkId") Integer[] checkId) {
//1-获取session中用户基本信息 和详细信息
User user = (User) session.getAttribute("user");
UserInfo dbUserInfo = userService.findAdressByUserId(user.getId().toString());
//2-将购物车内的*全部*商品id和对应购买数量放入map中 key:商品id value:购买数量
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < id.length; i++){
map.put(id[i],Integer.parseInt(buyNum[i]));
}
//3-创建我的订单map集合 key:product产品信息 value:购买数量
Subject subject = SecurityUtils.getSubject();
Map<Product, Integer> myCartMap = new HashMap<>();
subject.getSession().setAttribute("myCartMap", myCartMap);
Map<Product, Integer> myOrder = (HashMap<Product, Integer>) session.getAttribute("myCartMap");
//4-从存储有全部商品和购买数量的map中 取出 被选中的信息(checkbox)放到我的订单map中
for (Integer cId :checkId){
Product dbProduct = productService.findProductById(cId);
myOrder.put(dbProduct,map.get(cId));
}
model.addAttribute("myOrder", myOrder);
model.addAttribute("userInfo", dbUserInfo);
return "pages/order/pay_order";
}
/**
* 支付订单
*/
@PostMapping("/order")
public String order(HttpServletRequest request, HttpServletResponse response,
String addressInfo, @RequestParam("id") Integer[] ids, HttpSession session) throws Exception {
response.setContentType("text/html;charset=utf-8");
//1-生成订单编号
String orderId = UUID.randomUUID().toString();
User user = (User) session.getAttribute("user");
Map<Product, Integer> myCartMap = (Map<Product, Integer>) session.getAttribute("myCartMap");
//1-保存订单信息
orderService.saveOrder(user,ids, myCartMap, orderId);
//--------------------------------------支付操作未实现--------------------------
//2-支付成功后修改订单状态
orderService.updateOrderStatus(0, orderId);
//3-清空购物车
List<Product> list = productService.findProductsById(ids);
for (Product product:list) {
myCartMap.remove(product);
}
System.out.println("size:"+myCartMap.size());
return "pages/order/confirm";
}
}
用户管理控制层:
/**
* 用户管理控制层
*
*/
@Controller
public class UserController {
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
@Autowired
private EvaService evaService;
@Autowired
private LeaveService leaveService;
/**
* 去用户中心
*/
@GetMapping("/toUserCenter")
public String userCenter(Model model,HttpSession session){
User user = (User) session.getAttribute("user");
User userInfos = userService.findUserInfo(user.getId());
model.addAttribute("userInfos",userInfos);
return "/pages/user/user_center";
}
/**
* 去我的订单
*/
@RequestMapping("/toUserOrder")
public String toUserOrder(@RequestParam(required=true,defaultValue="1") Integer page, HttpSession session, Model model){
User users = (User) session.getAttribute("user");
User user = userService.findUserInfo(users.getId());
//PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageHelper.startPage(page, 3);
List<Order> orderList = orderService.findOrderListByUserId(users.getId());
PageInfo<Order> p = new PageInfo<Order>(orderList);
model.addAttribute("page", p);
model.addAttribute("orderList",orderList);
model.addAttribute("user",user);
return "/pages/user/user_orderlist";
} /**
* 显示收货地址
* @param model
* @return
*/
@RequestMapping("/userAddress")
public String userAddress(Model model, HttpSession session) {
User user = (User) session.getAttribute("user");
User userInfos = userService.findUserInfo(user.getId());
model.addAttribute("userInfos",userInfos);
return "/pages/user/user_address";
}
/**
*
*更新收货地址
*/
@RequestMapping("/updateAddress")
public String updateAddress(User user,Model model){
userService.updateAddress(user);
return "redirect:/userAddress";
}
/**
* 显示个人中心信息
* @param model
* @return
*/
@RequestMapping("/userAccount")
public String userAccount(Model model,HttpSession session){
User user = (User) session.getAttribute("user");
User userInfos = userService.findUserInfo(user.getId());
model.addAttribute("userInfos",userInfos);
return "/pages/user/user_account";
}
/**
* 跳转修改密码界面
* @return
*/
@RequestMapping("/updatePassword")
public String updatePassword(){
return "/pages/user/user_password";
}
/**
* 修改密码
* @param oldPwd 旧密码
* @param newPwd 新密码
* @param comfirmPwd 确认密码
* @param model 数据
* @return
*/
@RequestMapping("/savePassword")
public String saveAddress(
String oldPwd, String newPwd, String comfirmPwd,Model model,HttpSession session){
/* User user = (User) session.getAttribute("user");
if(user == null){
return "/login";
}
User userInfo = userService.findUserInfo(user.getUserId());
String dbPwd = userInfo.getPassword();
if(StringUtils.isEmpty(oldPwd) && StringUtils.isEmpty(newPwd) && StringUtils.isEmpty(comfirmPwd)){
//输入为空
model.addAttribute("errorInfo","输入为空!");
return "/pages/user/user_password";
}else if(!dbPwd.equals(oldPwd)){
//旧密码不对
model.addAttribute("errorInfo","旧密码不对!");
return "/pages/user/user_password";
}else if(!newPwd.equals(comfirmPwd)){
//两次密码输入不一致
model.addAttribute("errorInfo","两次输入密码不一致!");
return "/pages/user/user_password";
}else{
//输入合法,进入修改密码
userService.updatePwd(comfirmPwd);*/
return "redirect:/userAccount";
}
/**
* 跳转修改更换手机号界面
* @return
*/
@RequestMapping("/updateTel")
public String updateTel(){
return "/pages/user/user_telephone";
}
/*
* 更换手机号
* @param newTel
* @return
*/
@RequestMapping("/saveTelephone")
public String saveTel(String newTel,Model model,HttpSession session){
/* String regexMobile = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$";
User user = (User) session.getAttribute("user");
if(user == null){
return "/login";
}
if(!newTel.matches(regexMobile)){
model.addAttribute("msg","格式不对!");
return "/pages/user/user_telephone";
}
userService.updateTel(newTel,user.getUserId());
model.addAttribute("msg","修改成功");*/
return "redirect:/userAccount";
}
/**
* 解绑手机号
* @return
*/
@RequestMapping("/deleteTel")
public String deleteTel(HttpSession session){
/* User user = (User) session.getAttribute("user");
userService.deleteTel(user.getUserId());*/
return "redirect:/userAccount";
}
/**
* 跳转到更换邮箱界面
* @return
*/
@RequestMapping("/updateEmail")
public String updateEmail(){
return "/pages/user/user_email";
}
/**
* 更换邮箱
* @param newEmail 新邮箱
* @return
*/
@RequestMapping("/saveEmail")
public String saveEmail(String newEmail,Model model,HttpSession session){
String regexEmail = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
User user = (User) session.getAttribute("user");
if(user == null){
return "/login";
}
if (!newEmail.matches(regexEmail)){
model.addAttribute("msg","格式错误!");
return "/pages/user/user_email";
}
/* userService.updateEmail(user.getUserId(),newEmail);*/
return "redirect:/userAccount";
}
/**
* 修改订单状态
* @param status
* @param orderId
* @return
*/
@RequestMapping("/updateOrderStatus")
public String updateOrderStatus(Integer status,String orderId){
orderService.updateOrderStatus(status,orderId);
return "redirect:/toUserOrder";
}
/**
* 跳转评价页面
*/
@RequestMapping("/toEvaluate")
public String toEvaluate(String orderId,Integer status,Model model){
List<String> productNameList = new ArrayList<>();
orderService.findProductByOrderId(orderId).forEach((product) -> {
productNameList.add(product.getProductName());
});
model.addAttribute("productNameList",productNameList);
model.addAttribute("orderId",orderId);
model.addAttribute("status",status);
return "/pages/user/evaluate";
}
/**
* 发布评论
*/
@RequestMapping("/saveEva")
public String saveEva(String orderId,String content,Integer status){
evaService.saveEva(orderId,content,status);
return "redirect:/toEvaList";
}
/**
* 用户评价列表
* @return
*/
@RequestMapping("/toEvaList")
public String toEvaList(@RequestParam(required=true,defaultValue="1") Integer page,Model model){
PageHelper.startPage(page, 4);
List<Evaluate> evaList = evaService.findAllEvaList();
//PageHelper.startPage(page, pageSize);这段代码表示,程序开始分页了,page默认值是1,pageSize默认是10,意思是从第1页开始,每页显示10条记录。
PageInfo<Evaluate> p=new PageInfo<Evaluate>(evaList);
model.addAttribute("page", p);
model.addAttribute("evaList",evaList);
return "/pages/user/evaluate_list";
}
@RequestMapping("/createLeave")
public String createLeave(String content,HttpSession session){
User user = (User)session.getAttribute("user");
leaveService.createLeave(content,user);
return "redirect:/index";
}
@RequestMapping("/aboutUs")
public String aboutUs(){
return "/pages/other/about_us";
}
@RequestMapping("/userLogout")
public String userLogout(HttpSession httpSession){
//将user对象从session域中删除
httpSession.removeAttribute("user");
//页面应该跳转到登陆页面
return "redirect:/index";
}
}
商品业务控制层:
/**
* 前端product模块相关的controller
*/
@Controller
public class ProductController {
@Autowired
private ProductService productService;
@RequestMapping("/toList")
public String toList(@RequestParam(required = true, defaultValue = "1") Integer page, Model model) {
PageHelper.startPage(page, 6);
List<Product> productList = productService.findAllProductListByStatus(1);
List<Product> hotProductList = productService.findHotProductList();
model.addAttribute("productList", productList);
model.addAttribute("hotProductList", hotProductList);
PageInfo<Product> p = new PageInfo<>(productList);
model.addAttribute("page", p);
return "/pages/list/list1";
}
/**
* 查询商品种类名信息;查询热门商品信息;
* 获取数据,然后跳转到list.jsp页面并回显数据
* 根据输入的查询条件查询商品,然后跳转到list.jsp页面并回显数据
* 获取查询条件(商品的名称(product_name), 商品的种类(name))
* 商品的最低价格(minprice)及最高价格(maxprice)
*/
@PostMapping("/findProductByCondition")
public String findProductByCondition(@RequestParam(required = true, defaultValue = "1") Integer page, String product_name, String name, Double minprice, Double maxprice, Model model) {
PageHelper.startPage(page, 4);
List<Product> productConditionList = productService.findProductByCondition(product_name,name,minprice,maxprice);
List<Product> HotProductList = productService.findHotProductList();
PageInfo<Product> p = new PageInfo<Product>(productConditionList);
model.addAttribute("productList", productConditionList);
model.addAttribute("HotProductList", HotProductList);
model.addAttribute("pages", p);
return "/pages/list/list";
}
@GetMapping("/searchByConditition")
public String searchByConditition(@RequestParam(required = true, defaultValue = "1") Integer page,String keyword, Model model){
PageHelper.startPage(page, 4);
List<Product> productConditionList = productService.searchByConditition(keyword);
List<Product> HotProductList = productService.findHotProductList();
PageInfo<Product> p = new PageInfo<Product>(productConditionList);
model.addAttribute("productList", productConditionList);
model.addAttribute("HotProductList", HotProductList);
model.addAttribute("keyword",keyword);
model.addAttribute("pages", p);
return "/pages/list/list3";
}
/**
* 查询商品种类名信息;查询热门商品信息;
* 获取数据,然后跳转到list.jsp页面并回显数据
* 根据输入的查询条件查询商品,然后跳转到list.jsp页面并回显数据
* 获取查询条件(商品的名称(product_name), 商品的种类(name))
* 商品的最低价格(minprice)及最高价格(maxprice)
*/
@PostMapping("/findProductByCondition2")
public String findProductByCondition2(@RequestParam(required = true, defaultValue = "1") Integer page, String kindId, String product_name, String name, Double minprice, Double maxprice, Model model) {
PageHelper.startPage(page, 4);
List<Product> productConditionList = productService.findProductByCondition(product_name, name, minprice, maxprice);
List<Product> HotProductList = productService.findHotProductList();
PageInfo<Product> p = new PageInfo<Product>(productConditionList);
model.addAttribute("productList", productConditionList);
model.addAttribute("kindId", kindId);
model.addAttribute("HotProductList", HotProductList);
model.addAttribute("pages", p);
return "/pages/list/list2";
}
@GetMapping("/findProductByCategory")
public String findProductByCategory(@RequestParam(required = true, defaultValue = "1") Integer page,Integer kindId,Model model){
PageHelper.startPage(page, 4);
List<Product> productList = productService.findProductByCategory(kindId);
List<Product> HotProductList = productService.findHotProductList();
PageInfo<Product> p = new PageInfo<Product>(productList);
model.addAttribute("productList", productList);
model.addAttribute("kindId", kindId);
model.addAttribute("HotProductList", HotProductList);
model.addAttribute("pages", p);
return "/pages/list/list2";
}
/**
* 跳转到商品详情页面
* @return
*/
@GetMapping("/toDetail")
public String toDetail(Integer id, Model model){
//1-根据商品id查询商品信息
Product product = productService.findProductById(id);
//2-查询热门商品信息列表
List<Product> hotProductList = new ArrayList<>();
//2-1-从热门商品表中取出两个
productService.findProductBannerByCount(2).forEach(productBanner -> {
Product dbProduct = productService.findProductById(productBanner.getProductId());
if(dbProduct != null){
hotProductList.add(dbProduct);
}
});
model.addAttribute("product",product);
model.addAttribute("HotProductList",hotProductList);
//3-跳转到商品详情页面
return "/pages/list/detail";
}
}
源码获取:博客首页 "资源" 里下载!