项目编号: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]。
转载:https://blog.csdn.net/BS009/article/details/128201505