技术栈:
后端采用 springboot2.1 springmvc mybaits
前端采用bootstrap jquery thymeleaf html
数据库mysql jdk1.8
开发工具:eclipse idea myeclipse sts等java开发工具
热销,新品,推荐宠物未配置时,默认系统显示配置
后台管理:
管理员登陆
轮播图配置,热销,新品,推荐宠物配置
宠物分类管理
宠物管理: 宠物列表,宠物新增,修改,上下架管理。
会员管理:用户列表,禁用,解除功能
订单管理:修改 配送 关闭等功能
修改密码 安全退出
用户: 登陆注册,个人信息,搜索宠物 购物车 订单 模拟支付等操作
【535】基于web宠物商店管理系统源码和论文
摘 要
伴随着互联网技术的进步,各种电商平台也如雨后 春笋不断涌现。一个好的电商平台应该具有用户体验度高,用户信息安全等特点, 从而可以满足更多的用户需求。现有的电商平台虽然在不断完善,但仍然存在着 不少问题。本设计是一个基于java的springboot框架开发的 宠物商店项目,在较好地实现传 统电商平台的基础上又有创新和改善之处,比如分层搭建的设计思想,md5加密 算法的改进以及设计更为友好的操作界面等,以更好地服务大众。
本宠物商店宠物商店以IDEA+mysql为开发环境,HTML+CSS+JavaScript为页面编辑语言,springboot+mybatis为后台编辑语言来设计开发,开发一个 宠物商店正是为了企业独立开发的目的。J2EE体系的 宠物商店 具备很高的安全性和稳定性,以及更加出色的可扩展性和跨平台特点。在国外 J2EE 已经成为开发电子商务平台的主流技术,本文研发的 宠物商店系统使消费者进行购物时,不但推荐更为符合消费者的消 费习惯,且的质量安全以及用户个人信息能够得到有效保障,提升了消费者的购物体验,本系统主要设计用户选购,加入购物车,下单等功能,当然对应的有一个后台系统管理,主要是对前端即用户端的一个数据的支持管理,只有管理员角色才可以登陆。
本文基于springboot mybatis框架完整的实现了一个 宠物商店系统,可以为用户提供购买、等多个功能。从测试结果来看,系统完整实现了所需功能,而且具有一定的 稳定性和可靠性,并能够为用户提供良好的用户体验。总之,本系统基本符合客户的 需求,并达到了预期的目标。
关键词: 宠物商店 Idea mysql springboot
package sac.mall.controller.mall;
import sac.mall.common.ServiceResultEnum;
import sac.mall.controller.vo.ShoppingCartItemVO;
import sac.mall.controller.vo.UserVO;
import sac.mall.entity.Comment;
import sac.mall.entity.Goods;
import sac.mall.entity.MallUser;
import sac.mall.entity.Order;
import sac.mall.service.CommentService;
import sac.mall.service.GoodsService;
import sac.mall.service.ShoppingCartService;
import sac.mall.common.Constants;
import sac.mall.common.NewShopMallException;
import sac.mall.controller.vo.OrderDetailVO;
import sac.mall.service.OrderService;
import sac.mall.util.PageQueryUtil;
import sac.mall.util.Result;
import sac.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Controller
public class MallOrderController {
@Resource
private ShoppingCartService shoppingCartService;
@Resource
private OrderService orderService;
@Resource
private GoodsService goodsService;
@Resource
private CommentService commentService;
@GetMapping("/orders/{orderNo}")
public String orderDetailPage(HttpServletRequest request, @PathVariable("orderNo") String orderNo, HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
OrderDetailVO orderDetailVO = orderService.getOrderDetailByOrderNo(orderNo, user.getUserId());
if (orderDetailVO == null) {
return "error/error_5xx";
}
request.setAttribute("orderDetailVO", orderDetailVO);
return "mall/order-detail";
}
@GetMapping("/orders")
public String orderListPage(@RequestParam Map<String, Object> params, HttpServletRequest request, HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
params.put("userId", user.getUserId());
if (StringUtils.isEmpty(params.get("page"))) {
params.put("page", 1);
}
params.put("limit", Constants.ORDER_SEARCH_PAGE_LIMIT);
//封装我的订单数据
PageQueryUtil pageUtil = new PageQueryUtil(params);
request.setAttribute("orderPageResult", orderService.getMyOrders(pageUtil));
request.setAttribute("path", "orders");
return "mall/my-orders";
}
@GetMapping("/saveOrder")
public String saveOrder(HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
List<ShoppingCartItemVO> myShoppingCartItems = shoppingCartService.getMyShoppingCartItems(user.getUserId());
if (StringUtils.isEmpty(user.getAddress().trim())) {
//无收货地址
NewShopMallException.fail(ServiceResultEnum.NULL_ADDRESS_ERROR.getResult());
}
if (CollectionUtils.isEmpty(myShoppingCartItems)) {
//购物车中无数据则跳转至错误页
NewShopMallException.fail(ServiceResultEnum.SHOPPING_ITEM_ERROR.getResult());
}
//保存订单并返回订单号
String saveOrderResult = orderService.saveOrder(user, myShoppingCartItems);
//跳转到订单详情页
return "redirect:/orders/" + saveOrderResult;
}
@PutMapping("/orders/{orderNo}/cancel")
@ResponseBody
public Result cancelOrder(@PathVariable("orderNo") String orderNo, HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
String cancelOrderResult = orderService.cancelOrder(orderNo, user.getUserId());
if (ServiceResultEnum.SUCCESS.getResult().equals(cancelOrderResult)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(cancelOrderResult);
}
}
@PutMapping("/orders/{orderNo}/finish")
@ResponseBody
public Result finishOrder(@PathVariable("orderNo") String orderNo, HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
String finishOrderResult = orderService.finishOrder(orderNo, user.getUserId());
if (ServiceResultEnum.SUCCESS.getResult().equals(finishOrderResult)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(finishOrderResult);
}
}
@GetMapping("/selectPayType")
public String selectPayType(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
Order order = orderService.getNewBeeMallOrderByOrderNo(orderNo);
//todo 判断订单userId
//todo 判断订单状态
request.setAttribute("orderNo", orderNo);
request.setAttribute("totalPrice", order.getTotalPrice());
return "mall/pay-select";
}
@GetMapping("/payPage")
public String payOrder(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession, @RequestParam("payType") int payType) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
Order order = orderService.getNewBeeMallOrderByOrderNo(orderNo);
//todo 判断订单userId
//todo 判断订单状态
request.setAttribute("orderNo", orderNo);
request.setAttribute("totalPrice", order.getTotalPrice());
if (payType == 1) {
return "mall/alipay";
} else {
return "mall/wxpay";
}
}
@GetMapping("/paySuccess")
@ResponseBody
public Result paySuccess(@RequestParam("orderNo") String orderNo, @RequestParam("payType") int payType) {
String payResult = orderService.paySuccess(orderNo, payType);
if (ServiceResultEnum.SUCCESS.getResult().equals(payResult)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(payResult);
}
}
@PostMapping("/addComment")
@ResponseBody
public Result updateInfo(@RequestBody Comment comment, HttpSession httpSession) {
UserVO user = (UserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
Date date = new Date();//获取当前的日期
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String str = df.format(date);
comment.setCreateTime(str);
comment.setState(0);
Goods goods = goodsService.getNewBeeMallGoodsById(comment.getGoodsId().longValue());
if(goods==null){
comment.setGoodsName("该宠物已删除");
}else{
comment.setGoodsName(goods.getGoodsName());
}
comment.setNickName(user.getNickName());
if (commentService.insert(comment)==0) {
Result result = ResultGenerator.genFailResult("新增失败");
return result;
} else {
//返回成功
Result result = ResultGenerator.genSuccessResult();
return result;
}
}
}
package sac.mall.controller.admin;
import sac.mall.common.ServiceResultEnum;
import sac.mall.entity.Goods;
import sac.mall.entity.GoodsCategory;
import sac.mall.service.CategoryService;
import sac.mall.service.GoodsService;
import sac.mall.common.Constants;
import sac.mall.common.CategoryLevelEnum;
import sac.mall.util.PageQueryUtil;
import sac.mall.util.Result;
import sac.mall.util.ResultGenerator;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.thymeleaf.expression.Ids;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* @author 13
* XXXXXX
* @email XXXXXX@qq.com
* @link
*/
@Controller
@RequestMapping("/admin")
public class GoodsController {
@Resource
private GoodsService goodsService;
@Resource
private CategoryService categoryService;
@GetMapping("/goods")
public String goodsPage(HttpServletRequest request) {
request.setAttribute("path", "newbee_mall_goods");
return "admin/goods";
}
@GetMapping("/goods/edit")
public String edit(HttpServletRequest request) {
request.setAttribute("path", "edit");
//查询所有的一级分类
List<GoodsCategory> firstLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), CategoryLevelEnum.LEVEL_ONE.getLevel());
if (!CollectionUtils.isEmpty(firstLevelCategories)) {
//查询一级分类列表中第一个实体的所有二级分类
List<GoodsCategory> secondLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_TWO.getLevel());
if (!CollectionUtils.isEmpty(secondLevelCategories)) {
//查询二级分类列表中第一个实体的所有三级分类
List<GoodsCategory> thirdLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_THREE.getLevel());
request.setAttribute("firstLevelCategories", firstLevelCategories);
request.setAttribute("secondLevelCategories", secondLevelCategories);
request.setAttribute("thirdLevelCategories", thirdLevelCategories);
request.setAttribute("path", "goods-edit");
return "admin/goods_edit";
}
}
return "error/error_5xx";
}
@GetMapping("/goods/edit/{goodsId}")
public String edit(HttpServletRequest request, @PathVariable("goodsId") Long goodsId) {
request.setAttribute("path", "edit");
Goods goods = goodsService.getNewBeeMallGoodsById(goodsId);
if (goods == null) {
return "error/error_400";
}
if (goods.getGoodsCategoryId() > 0) {
if (goods.getGoodsCategoryId() != null || goods.getGoodsCategoryId() > 0) {
//有分类字段则查询相关分类数据返回给前端以供分类的三级联动显示
GoodsCategory currentGoodsCategory = categoryService.getGoodsCategoryById(goods.getGoodsCategoryId());
//宠物表中存储的分类id字段为三级分类的id,不为三级分类则是错误数据
if (currentGoodsCategory != null && currentGoodsCategory.getCategoryLevel() == CategoryLevelEnum.LEVEL_THREE.getLevel()) {
//查询所有的一级分类
List<GoodsCategory> firstLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), CategoryLevelEnum.LEVEL_ONE.getLevel());
//根据parentId查询当前parentId下所有的三级分类
List<GoodsCategory> thirdLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(currentGoodsCategory.getParentId()), CategoryLevelEnum.LEVEL_THREE.getLevel());
//查询当前三级分类的父级二级分类
GoodsCategory secondCategory = categoryService.getGoodsCategoryById(currentGoodsCategory.getParentId());
if (secondCategory != null) {
//根据parentId查询当前parentId下所有的二级分类
List<GoodsCategory> secondLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondCategory.getParentId()), CategoryLevelEnum.LEVEL_TWO.getLevel());
//查询当前二级分类的父级一级分类
GoodsCategory firestCategory = categoryService.getGoodsCategoryById(secondCategory.getParentId());
if (firestCategory != null) {
//所有分类数据都得到之后放到request对象中供前端读取
request.setAttribute("firstLevelCategories", firstLevelCategories);
request.setAttribute("secondLevelCategories", secondLevelCategories);
request.setAttribute("thirdLevelCategories", thirdLevelCategories);
request.setAttribute("firstLevelCategoryId", firestCategory.getCategoryId());
request.setAttribute("secondLevelCategoryId", secondCategory.getCategoryId());
request.setAttribute("thirdLevelCategoryId", currentGoodsCategory.getCategoryId());
}
}
}
}
}
if (goods.getGoodsCategoryId() == 0) {
//查询所有的一级分类
List<GoodsCategory> firstLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(0L), CategoryLevelEnum.LEVEL_ONE.getLevel());
if (!CollectionUtils.isEmpty(firstLevelCategories)) {
//查询一级分类列表中第一个实体的所有二级分类
List<GoodsCategory> secondLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(firstLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_TWO.getLevel());
if (!CollectionUtils.isEmpty(secondLevelCategories)) {
//查询二级分类列表中第一个实体的所有三级分类
List<GoodsCategory> thirdLevelCategories = categoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), CategoryLevelEnum.LEVEL_THREE.getLevel());
request.setAttribute("firstLevelCategories", firstLevelCategories);
request.setAttribute("secondLevelCategories", secondLevelCategories);
request.setAttribute("thirdLevelCategories", thirdLevelCategories);
}
}
}
request.setAttribute("goods", goods);
request.setAttribute("path", "goods-edit");
return "admin/goods_edit";
}
/**
* 列表
*/
@RequestMapping(value = "/goods/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(goodsService.getNewBeeMallGoodsPage(pageUtil));
}
/**
* 添加
*/
@RequestMapping(value = "/goods/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestBody Goods goods) {
if (StringUtils.isEmpty(goods.getGoodsName())
|| StringUtils.isEmpty(goods.getGoodsIntro())
|| StringUtils.isEmpty(goods.getTag())
|| Objects.isNull(goods.getOriginalPrice())
|| Objects.isNull(goods.getGoodsCategoryId())
|| Objects.isNull(goods.getSellingPrice())
|| Objects.isNull(goods.getStockNum())
|| Objects.isNull(goods.getGoodsSellStatus())
|| StringUtils.isEmpty(goods.getGoodsCoverImg())
|| StringUtils.isEmpty(goods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = goodsService.saveNewBeeMallGoods(goods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/goods/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody Goods goods) {
if (Objects.isNull(goods.getGoodsId())
|| StringUtils.isEmpty(goods.getGoodsName())
|| StringUtils.isEmpty(goods.getGoodsIntro())
|| StringUtils.isEmpty(goods.getTag())
|| Objects.isNull(goods.getOriginalPrice())
|| Objects.isNull(goods.getSellingPrice())
|| Objects.isNull(goods.getGoodsCategoryId())
|| Objects.isNull(goods.getStockNum())
|| Objects.isNull(goods.getGoodsSellStatus())
|| StringUtils.isEmpty(goods.getGoodsCoverImg())
|| StringUtils.isEmpty(goods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = goodsService.updateNewBeeMallGoods(goods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/goods/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
Goods goods = goodsService.getNewBeeMallGoodsById(id);
if (goods == null) {
return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());
}
return ResultGenerator.genSuccessResult(goods);
}
/**
* 删除
*/
@RequestMapping(value = "/goods/fdelete", method = RequestMethod.POST)
@ResponseBody
public Result fdelete(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (goodsService.deleteBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("删除失败");
}
}
/**
* 下架
* @param ids
* @param sellStatus
* @return
*/
@RequestMapping(value = "/goods/status/{sellStatus}", method = RequestMethod.PUT)
@ResponseBody
public Result delete(@RequestBody Long[] ids, @PathVariable("sellStatus") int sellStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (sellStatus != Constants.SELL_STATUS_UP && sellStatus != Constants.SELL_STATUS_DOWN) {
return ResultGenerator.genFailResult("状态异常!");
}
if (goodsService.batchUpdateSellStatus(ids, sellStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("修改失败");
}
}
/**
* deleteGoods
* @param ids
* @param
* @return
*/
@RequestMapping(value = "/goods/deleteGoods", method = RequestMethod.DELETE)
@ResponseBody
public Result DELETE(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (goodsService.deletegoosBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("删除失败");
}
}
}