基于javaweb+mysql的springboot在线电子商城管理系统(java+springboot+thymeleaf+bootstrap+thymeleaf+html+layui+maven+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot在线电子商城管理系统(java+springboot+thymeleaf+bootstrap+thymeleaf+html+layui+maven+mysql)
项目介绍
本项目分为管理员与普通用户两种角色, 管理员角色包含以下功能: 发货,后台登录后首页,商品管理,商城类别增删改查,用户管理,管理员登录,订单管理,资料截图,首页等功能。 用户角色包含以下功能:
查看分类,加入购物车,提交订单,查看商品详情,查看订单,用户登录等功能。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
4.数据库:MySql 5.7版本;
技术栈
-
后端:SpringBoot+Thymeleaf
-
前端:HTML+CSS+JavaScript+bootstrap+jQuery+layui
使用说明
运行项目,在浏览器中输入http://localhost:8082/mall/ 登录 普通用户账号密码: me/123456
管理员账号密码: admin/123456
@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
* @param map
* @return
*/
@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";
}
/**
* 查找热门商品
*
* @param id
* @return
*/
void delById(int id);
/**
* 查询订单的订单项
*
* @param orderId
* @return
*/
List<OrderItem> findItems(int orderId);
/**
* 更改订单状态
*
* @param id
* @param status
*/
void updateStatus(int id, int status);
/**
* 查找用户的订单列表
*
* @param request
* @return
*/
List<Order> findUserOrder(HttpServletRequest request);
/**
* 支付
* @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;
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private OrderItemDao orderItemDao;
@Autowired
private ProductDao productDao;
@Autowired
private ShopCartService shopCartService;
@Override
public Order findById(int id) {
return orderDao.getOne(id);
}
@Override
public Page<Order> findAll(Pageable pageable) {
return orderDao.findAll(pageable);
}
@Override
public List<Order> findAllExample(Example<Order> example) {
return orderDao.findAll(example);
}
@Override
public void update(Order order) {
orderDao.save(order);
}
@Override
public int create(Order order) {
Order order1 = orderDao.save(order);
return order1.getId();
}
@Override
public void delById(int id) {
orderDao.delete(id);
}
/**
* 查询订单项详情
}
public interface OrderService {
/**
* 订单状态 1:未付款 2:等待发货 3:等待收货 4:订单完成
*/
int STATE_NO_PAY = 1;
int STATE_WAITE_SEND = 2;
int STATE_WAITE_RECEIVE = 3;
int STATE_COMPLETE = 4;
/**
* 根据id查询
*
* @param id
* @return
*/
Order findById(int id);
/**
* 分页查询所有
*
* @param pageable
* @return
*/
Page<Order> findAll(Pageable pageable);
/**
* 按条件查询
*
* @param example
* @return
*/
List<Order> findAllExample(Example<Order> example);
* 分页查询所有
*
* @param pageable
* @return
*/
Page<AdminUser> findAll(Pageable pageable);
/**
* 按条件查询
*
* @param example
* @return
*/
List<AdminUser> findAllExample(Example<AdminUser> example);
/**
* 更新
*
* @param adminUser
* @return
*/
void update(AdminUser adminUser);
/**
* 创建
*
* @param adminUser
* @return
*/
int create(AdminUser adminUser);
/**
* 根据Id删除
*
* @param id
* @return
*/
void delById(int id);
/**
* 检查登录
* @param request
* @param username
* @param pwd
* @return
*/
AdminUser checkLogin(HttpServletRequest request,String username, String pwd);
}
@Controller
@RequestMapping("/admin/product")
public class AdminProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@RequestMapping("/toList.html")
public String toList() {
return "admin/product/list";
}
@RequestMapping("/toAdd.html")
public String toAdd() {
return "admin/product/add";
}
@RequestMapping("/toEdit.html")
public String toEdit(int id, Map<String, Object> map) {
Product product = productService.findById(id);
Classification classification = classificationService.findById(product.getCsid());
product.setCategorySec(classification);
map.put("product", product);
return "admin/product/edit";
}
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<Product>> listProduct(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<Product> list = productService.findAll(pageable).getContent();
return new ResultBean<>(list);
}
@ResponseBody
@RequestMapping("/getTotal")
public ResultBean<Integer> getTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) productService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@RequestMapping("/del.do")
@ResponseBody
public ResultBean<Boolean> del(int id) {
productService.delById(id);
return new ResultBean<>(true);
}
/**
* 更改订单状态
*
* @param id
* @param status
*/
void updateStatus(int id, int status);
/**
* 查找用户的订单列表
*
* @param request
* @return
*/
List<Order> findUserOrder(HttpServletRequest request);
/**
* 支付
* @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);
}
public ResultBean<List<OrderItem>> listCart(HttpServletRequest request) throws Exception {
List<OrderItem> orderItems = shopCartService.listCart(request);
return new ResultBean<>(orderItems);
}
}
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private OrderItemDao orderItemDao;
@Autowired
private ProductDao productDao;
@Autowired
private ShopCartService shopCartService;
@Override
public Order findById(int id) {
return orderDao.getOne(id);
}
@Override
public Page<Order> findAll(Pageable pageable) {
return orderDao.findAll(pageable);
}
@Override
/**
* @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);
OutputStream out = response.getOutputStream();
out.write(jsonStr.getBytes("UTF-8"));
out.flush();
}
}
* 查看购物车
*
* 查询出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;
}
}
}
@ResponseBody
@RequestMapping("/list.do")
public ResultBean<List<Product>> listProduct(int pageindex,
@RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
Pageable pageable = new PageRequest(pageindex, pageSize, null);
List<Product> list = productService.findAll(pageable).getContent();
return new ResultBean<>(list);
}
@ResponseBody
@RequestMapping("/getTotal")
public ResultBean<Integer> getTotal() {
Pageable pageable = new PageRequest(1, 15, null);
int total = (int) productService.findAll(pageable).getTotalElements();
return new ResultBean<>(total);
}
@RequestMapping("/del.do")
@ResponseBody
public ResultBean<Boolean> del(int id) {
productService.delById(id);
return new ResultBean<>(true);
}
@RequestMapping(method = RequestMethod.POST, value = "/add.do")
public void add(MultipartFile image,
String title,
Double marketPrice,
Double shopPrice,
int isHot,
String desc,
int csid,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
Product product = new Product();
product.setTitle(title);
product.setMarketPrice(marketPrice);
product.setShopPrice(shopPrice);
}
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private OrderItemDao orderItemDao;
@Autowired
private ProductDao productDao;
@Autowired
private ShopCartService shopCartService;
@Override
public Order findById(int id) {
}
}
@Service
public class AdminUserServiceImpl implements AdminUserService {
@Autowired
private AdminUserDao adminUserDao;
@Override
public AdminUser findById(int id) {
return adminUserDao.getOne(id);
}
@Override
public Page<AdminUser> findAll(Pageable pageable) {
return adminUserDao.findAll(pageable);
}
@Override
public List<AdminUser> findAllExample(Example<AdminUser> example) {
return adminUserDao.findAll(example);
}
@Override
public void update(AdminUser adminUser) {
adminUserDao.save(adminUser);
}
@Override
public int create(AdminUser adminUser) {
AdminUser adminUser1 = adminUserDao.save(adminUser);
return "admin/category/edit";
} else if (type == 2) {// 二级分类页面
Classification classification1 = classificationService.findById(classification.getParentId());
map.put("cate", classification1);
map.put("catese",classification);
return "admin/categorysec/edit";
} else {
return "";
}
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/add.do")
public ResultBean<Boolean> add(String cname, int parentId, int type) {
Classification classification = new Classification();
classification.setCname(cname);
classification.setParentId(parentId);
classification.setType(type);
classificationService.create(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping(method = RequestMethod.POST, value = "/update.do")
public ResultBean<Boolean> update(int id, String cname, int parentId, int type) {
Classification classification = classificationService.findById(id);
classification.setCname(cname);
classification.setParentId(parentId);
classification.setType(type);
classificationService.update(classification);
return new ResultBean<>(true);
}
@ResponseBody
@RequestMapping("/del.do")
public ResultBean<Boolean> del(int id) {
classificationService.delById(id);
return new ResultBean<>(true);
}
@RequestMapping("/list.do")
@ResponseBody
public ResultBean<List<Classification>> findAll(int type,
int pageindex, @RequestParam(value = "pageSize", defaultValue = "15") int pageSize) {
List<Classification> list = new ArrayList<>();
if (pageindex == -1)
list = classificationService.findAll(type);
else {
*/
@Aspect
@Order(5)
@Component
public class WebLogAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(WebLogAspect.class);
ThreadLocal<Long> startTime = new ThreadLocal<>();
@Pointcut("execution(public * priv.jesse.mall.controller.*.*(..))")//切入点
public void webLog() {
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
startTime.set(System.currentTimeMillis());
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求内容
LOGGER.info("**************Start API Request**************");
LOGGER.info("URL : " + request.getRequestURI().toString());
LOGGER.info("HTTP_METHOD : " + request.getMethod());
LOGGER.info("IP : " + request.getRemoteAddr());
LOGGER.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
LOGGER.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
LOGGER.info("RESPONSE : " + ret);
LOGGER.info("SPEND TIME : " + (System.currentTimeMillis() - startTime.get()));
LOGGER.info("***************End API Request***************");
}
}
out.write(jsonStr.getBytes("UTF-8"));
out.flush();
}
}
@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 "";
}
}
/**
* 打开添加分类页面
*
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private OrderItemDao orderItemDao;
@Autowired
private ProductDao productDao;
@Autowired
private ShopCartService shopCartService;
@Override
public Order findById(int id) {
return orderDao.getOne(id);
}
@Override
public Page<Order> findAll(Pageable pageable) {
return orderDao.findAll(pageable);
}
@Override
public List<Order> findAllExample(Example<Order> example) {
return orderDao.findAll(example);