收藏点赞不迷路 关注作者有好处
文末获取源码
项目编号:BS-SC-036
一,项目简介
系统整体介绍:
本系统主要基于Springboot框架开发实现,实现了一个以茶叶为主题的商城系统。在本商城系统中,可以实现在线购买酒水,在线支付,管理个人订单,管理个人收货地址,确认收货等功能。用户浏览商城的茶叶产品后可以将茶叶商品添加到购物车中,然后下单支付购买。用户登陆后可以在个人中心中管理自己的购物车信息、订单信息、收货地址信息等。同样在商城前端页面中提供了全文搜索功能,用户可以根据酒水的相关功效或禁忌来查询符合自己要的酒水商品。
系统同样提供了强大的后台管理系统,在后台管理模块中可以实现能前台注册用户的管理操作,可以管理所有用户的订单信息,根据订单支付情况进行发货等操作。同样可以管理产品的分类,可以管理商品的信息,以图文的形式来添加商品信息。为了更好了了解商品的销售情况,在后台使用echart实现了商品销售的图形报表和订单的统计报表功能。
系统使用了SpringSecurity框架来管理系统的用户登陆和权限认证操作,以保证系统的安全性。本系统功能完整,页面简洁大方,运行无误,适合做毕业设计使用。
相似性推荐:根据用户的浏览商品的相似性做协同过滤运算,从而给用户进行商品的推荐。
浏览记录查询:用户的浏览和搜索记录后台会进行记录,在用户进行搜索时会根据搜索关键词的总量进行排行,从而实现推荐的效果
编辑
编辑
二,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
后台开发技术:springboot+springmvc+mybatis+ Springsecurity
前台开发技术:jsp+jquery+ajax+bootstrap
三,系统展示
系统首页
编辑
分类展示
编辑
商品详情
编辑
全文检索:记录用户检索历史记录并可以根据历史记录来进行快速搜索
编辑
根据品牌进行搜索
编辑
相似性推荐:根据用户的浏览商品的相似性做协同过滤运算,从而给用户进行商品的推荐
编辑
用户注册
编辑
用户登陆
编辑
登陆后可以进行商品购买
编辑
下单后可个人中心可以查看我的订单,并可以取消订单
编辑
个人中心管理个人收货地址
编辑
后台管理员登陆
编辑
用户管理
编辑
轮播图管理
编辑
商品分类动态维护
编辑
商品品牌管理
编辑
商品管理
编辑
订单管理
编辑
图形统计报表
编辑
编辑
四,核心代码展示
package com.yw.eshop.controller.front;
import com.yw.eshop.domain.Carousel;
import com.yw.eshop.domain.Product;
import com.yw.eshop.domain.ProductType;
import com.yw.eshop.domain.SearchHistory;
import com.yw.eshop.service.CarouselService;
import com.yw.eshop.service.ProductService;
import com.yw.eshop.service.ProductTypeService;
import com.yw.eshop.service.SearchHistoryService;
import com.yw.eshop.service.CarouselService;
import com.yw.eshop.service.ProductService;
import com.yw.eshop.service.ProductTypeService;
import com.yw.eshop.service.SearchHistoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
* 前端首页控制接口
*/
@Controller
@RequestMapping("/front")
public class FrontIndexController {
@Autowired//轮播图
private CarouselService carouselService ;
@Autowired//商品类型
private ProductTypeService productTypeService ;
@Autowired//商品
private ProductService productService ;
@Autowired
private SearchHistoryService searchHistoryService;
@RequestMapping("/index")
public String index(Model model){
//轮播图
List<Carousel> carousels = carouselService.queryCarouselAll();
model.addAttribute("allcarouselFigures",carousels);
//分类
List<ProductType> productTypes = productTypeService.queryProductTypeAll();
model.addAttribute("allProductTypes",productTypes);
//新品
List<Product> newProducts = productService.queryNewProduct(6);
model.addAttribute("newProducts", newProducts);
//查询热搜词
List<SearchHistory> searchHistorys = searchHistoryService.querySearchHistoryPages(10);
model.addAttribute("searchHistorys",searchHistorys);
//排行榜
List<Product> rankings = productService.queryProductRankings();
model.addAttribute("rankings", rankings);
//白酒
ProductType productType = new ProductType();
productType.setProductTypeName("白酒");
Product product = new Product();
product.setProductType(productType);
List<Product> list = productService.queryProductsByType(product, 5);
model.addAttribute("list", list);
//红酒
productType.setProductTypeName("红酒");
product.setProductType(productType);
product.getProductType().setProductTypeName("红酒");
List<Product> list2 = productService.queryProductsByType(product, 12);
model.addAttribute("list2", list2);
//洋酒
productType.setProductTypeName("洋酒");
product.setProductType(productType);
List<Product> list3 = productService.queryProductsByType(product, 5);
model.addAttribute("list3", list3);
//养生酒
productType.setProductTypeName("养生酒");
product.setProductType(productType);
List<Product> list4 = productService.queryProductsByType(product, 12);
model.addAttribute("list4", list4);
return "front/index/index";
}
}
package com.yw.eshop.controller.front;
import com.yw.eshop.domain.User;
import com.yw.eshop.service.UserService;
import com.yw.eshop.utils.EncryptionUtils;
import com.yw.eshop.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* 前端用户登陆退出
*/
@Controller
@RequestMapping("/front/login")
public class FrontLoginController {
@Autowired
private UserService userService;
@RequestMapping("/loginPage")
public String loginPage(){
return "front/login";
}
@RequestMapping("/login")
@ResponseBody
public String login(String username, String password, String code, String autoLogin,
HttpServletRequest request, HttpSession session, HttpServletResponse response){
String code1 = (String) session.getAttribute("code");
if(StringUtils.isEmpty(code)||!code.equalsIgnoreCase(code1)){
return "验证码错误";
}
if(!StringUtils.isEmpty(username)){
User user = userService.queryUserByName(username, 1);
if(user==null){
return "用户名不存在";
}else {
String psw1 = user.getPassword();
if(psw1.equals(EncryptionUtils.encryptMD5(password))){
System.out.println("登录成功");
session.setAttribute("user",user);
if(!StringUtils.isEmpty(autoLogin)&&autoLogin.equals("1")){
Cookie username_cookie = new Cookie("username", username);
username_cookie.setMaxAge(3600*24*7);
username_cookie.setPath(request.getContextPath());
response.addCookie(username_cookie);
}else {
Cookie username_cookie = new Cookie("username", username);
username_cookie.setMaxAge(0);
username_cookie.setPath(request.getContextPath());
response.addCookie(username_cookie);
}
return "登录成功";
}else {
return "密码错误";
}
}
}else {
return "用户名为空";
}
}
@RequestMapping("/logout")
public void logout(HttpSession session,HttpServletRequest request,HttpServletResponse response) throws IOException {
session.removeAttribute("user");
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for (Cookie cookie : cookies) {
if ("username".equals(cookie.getName())) {
cookie.setMaxAge(0);
cookie.setPath(request.getContextPath());
response.addCookie(cookie);
}
}
}
response.sendRedirect(request.getContextPath()+"/front/login/loginPage");
}
}
package com.yw.eshop.controller.front;
import com.yw.eshop.domain.Order;
import com.yw.eshop.domain.OrderProduct;
import com.yw.eshop.domain.User;
import com.yw.eshop.service.OrderProductService;
import com.yw.eshop.service.OrderService;
import com.yw.eshop.service.OrderProductService;
import com.yw.eshop.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.List;
/**
* 前台订单控制器
*/
@Controller
@RequestMapping("front/order")
public class FrontOrderController {
@Autowired
private OrderService orderService;
@Autowired
private OrderProductService orderProductService;
/**
* 前台个人中心订单查询
* @param session
* @param model
* @return
*/
@RequestMapping("index")
private String index(HttpSession session, Model model){
try {
User user = (User) session.getAttribute("user");
if (user == null) {
return "redirect:/front/login/loginPage";
} else {
List<Order> list = orderService.queryAllOrder(user.getId());
for (Order order : list) {
List<OrderProduct> orderProducts = orderProductService.queryOrderProByOrderId(order.getId());
order.setList(orderProducts);
}
model.addAttribute("list", list);
return "front/order/order";
}
}catch (Exception e){
e.printStackTrace();
model.addAttribute("errMessage","服务器繁忙"+e.getMessage());
return "500";
}
}
/**
* 前台用户取消订单:条件是未发货状态
* @param id
* @param model
* @return
*/
@RequestMapping("/delete")
@ResponseBody
public String delete(String id, Model model){
model.addAttribute("id", id);
try {
int i = orderService.delete(id);
if (i==0){
model.addAttribute("errMessage","服务器繁忙操作失败");
return "500";
}
}catch (Exception e){
model.addAttribute("errMessage",e.getMessage());
return "500";
}
//return "forward:/front/order/index";
model.addAttribute("url", "/front/order/index");
return "success";
}
/**
* 前台用户确认收货:条件是己发货状态
* @param id
* @param model
* @return
*/
@RequestMapping("/update")
@ResponseBody
public String update(String id,Integer status, Model model){
model.addAttribute("id", id);
try {
int i = orderService.updateStatus(id,status);
if (i==0){
model.addAttribute("errMessage","服务器繁忙操作失败");
return "500";
}
}catch (Exception e){
model.addAttribute("errMessage",e.getMessage());
return "500";
}
//return "forward:/front/order/index";
model.addAttribute("url", "/front/order/index");
return "success";
}
}
package com.yw.eshop.controller.front;
import com.alibaba.fastjson.JSON;
import com.yw.eshop.domain.*;
import com.yw.eshop.service.*;
import com.yw.eshop.domain.*;
import com.yw.eshop.utils.UUIDUtils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yw.eshop.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 购物车处理控制品接口
*/
@Controller
@RequestMapping("front/shop_cart")
public class ShopCartController {
@Autowired
private ReceiveAddressService receiveAddressService;
@Autowired
private ShopCartProductService shopCartProductService;
@Autowired
private ShopCartService shopCartService;
@Autowired
private OrderService orderService;
@Autowired
private OrderProductService orderProductService;
@RequestMapping("/shopCart")
public String index(HttpSession session, Model model){
try{
User user =(User) session.getAttribute("user");
if (user ==null){
return "redirect:/front/login/loginPage";
}else {
ShopCart shopCart=shopCartService.queryShopCartByUserID(user.getId());
List<ReceiveAddress> receiveAddresses=receiveAddressService.queryAddressByUserID(user.getId());
model.addAttribute("address",receiveAddresses);
List<ShopCartProduct> list=shopCartProductService.queryCartProductAll(shopCart.getId());
model.addAttribute("list",list);
}
return "front/shop_cart/shop_cart";
}catch (Exception e){
e.printStackTrace();
model.addAttribute("errMessage","服务器繁忙"+e.getMessage());
return "500";
}
}
@RequestMapping("addProductToCart")
@ResponseBody
public String addProductToCart(HttpSession session, String product_id,Integer product_num) throws JsonProcessingException {
Map map =new HashMap();
try{
User user =(User) session.getAttribute("user");
if (user ==null){
map.put("message","请登录后再操作");
map.put("url","/front/login/loginPage");
}else {
ShopCart shopCart=shopCartService.queryShopCartByUserID(user.getId());
ShopCartProduct shopCartProduct=new ShopCartProduct();
Product product=new Product();
product.setId(product_id);
shopCartProduct.setProduct(product);
shopCartProduct.setShopCart(shopCart);
shopCartProduct.setProductNum(product_num);
shopCartProductService.addShop(shopCartProduct);
map.put("result",true);
}
}catch (Exception e){
e.printStackTrace();
map.put("message","添加失败"+e.getMessage());
}
ObjectMapper objectMapper = new ObjectMapper();
String val = objectMapper.writeValueAsString(map);
return val;
}
@RequestMapping("/deleteProduct")
@ResponseBody
public String delete(String id) throws JsonProcessingException {
Map map =new HashMap();
try {
int i = shopCartProductService.deleteById(id);
if (i==0){
map.put("message","删除失败");
}else {
map.put("message","删除成功");
map.put("result",true);
}
}catch (Exception e){
e.printStackTrace();;
map.put("message","删除失败:"+e.getMessage());
}
ObjectMapper objectMapper = new ObjectMapper();
String val = objectMapper.writeValueAsString(map);
System.out.println(val);
return val;
}
@RequestMapping("/batchDel")
@ResponseBody
public String batchDel(String[] ids) throws JsonProcessingException {
Map map =new HashMap();
try {
shopCartProductService.deleteAll(ids);
map.put("message","删除成功");
map.put("result",true);
}catch (Exception e){
e.printStackTrace();;
map.put("message","删除失败:"+e.getMessage());
}
ObjectMapper objectMapper = new ObjectMapper();
String val = objectMapper.writeValueAsString(map);
System.out.println(val);
return val;
}
@RequestMapping("compute")
@ResponseBody
public String compute(String products,String address_id,HttpSession session) throws JsonProcessingException {
Map map =new HashMap();
User user =(User) session.getAttribute("user");
try {
if (user ==null){
map.put("message","请登录后再操作");
map.put("url","/front/login/loginPage");
}else {
List<ProIdAndNum> proIdAndNums= JSON.parseArray(products,ProIdAndNum.class);
Order order=new Order();
String OrderProId=UUIDUtils.getId();
order.setId(OrderProId);
order.setCreateTime(new Date());
order.setUserId(user.getId());
ReceiveAddress receiveAddress = new ReceiveAddress();
receiveAddress.setId(address_id);
order.setReceiveAddress(receiveAddress);
orderService.addOrderOne(order);
ShopCart shopCart=shopCartService.queryShopCartByUserID(user.getId());
for (ProIdAndNum proIdAndNum : proIdAndNums) {
OrderProduct orderProduct=new OrderProduct();
orderProduct.setId(UUIDUtils.getId());
orderProduct.setOrder(order);
Product product=new Product();
product.setId(proIdAndNum.getId());
orderProduct.setProduct(product);
orderProduct.setProductNum(proIdAndNum.getNum());
orderProductService.addOrdProOne(orderProduct);
shopCartProductService.deleteShopCartBy(shopCart.getId(),proIdAndNum.getId());
}
map.put("message","结算成功");
map.put("result",true);
}
}catch (Exception e){
map.put("message","服务器繁忙:"+e.getMessage());
}
ObjectMapper objectMapper = new ObjectMapper();
String val = objectMapper.writeValueAsString(map);
System.out.println(val);
return val;
}
}
五,项目总结
在目前电商为王的中国社会上,种类繁多的电子商务网站如雨后春笋般纷纷建立,百花齐鸣的发展态势可以在很大程度上,十分有效的解决原来时代的信息资源闭塞和地域上的限制[1]。网上交易代替了很多传统的线下消费,这种势头发展的越来越火热,而这一却都是伴随着用户的购买能力的提高,和IT信息化产业的发展以及新型互联网技术的应用[2]。
互联网以及移动互联网的普及应用,也使得消费者的消费路径更加快捷短暂,足不出户可一缆天下,一机在手可买遍全球。所以消费者基本上已经被新的消费模式所吸引,也具备了网络消费的应用水平。而对于广大的电商平台来讲,大而全的电商有之,小而美的电商也有自己的存活空间[3]。而最近这些年比较流行的垂直电商平台的崛起和应用,也让我们的用户可以直接找到自己所喜欢酒水的平台,进行点对点的消费,这就是我们进行酒水电商研究的一个基础背景[6]。