源码获取:博客首页 "资源" 里下载!

JAVA springboot 电商书城平台系统(已调试) 主要实现了书城网站的浏览、加入购物车操作、订单操作、支付操作、分类查看、搜索、以及后台上传图书信息以及订单管理和一些基本操作功能

主要功能截图如下:

模拟支付宝支付:

主要技术:java springboot springbmvc  shiro  mybatis  mysql  jquery  css  js  jsp  bootstarp.js

用户信息控制层:

@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate IUserService userService;@Autowiredprivate IMailService mailService;@Autowiredprivate IStoreService storeService;@Value("${mail.fromMail.addr}")private String from;@Value("${my.ip}")private String ip;private final String USERNAME_PASSWORD_NOT_MATCH = "用户名或密码错误";private final String USERNAME_CANNOT_NULL = "用户名不能为空";@RequestMapping("/login")public String login(@RequestParam(value = "username", required = false) String username,@RequestParam(value = "password", required = false) String password,HttpServletRequest request, Model model) {if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {return "login";}//未认证的用户Subject userSubject = SecurityUtils.getSubject();if (!userSubject.isAuthenticated()) {UsernamePasswordToken token = new UsernamePasswordToken(username, password);token.setRememberMe(false);//禁止记住我功能try {//登录成功userSubject.login(token);User loginUser = (User) userSubject.getPrincipal();request.getSession().setAttribute("loginUser", loginUser);Store store = storeService.findStoreByUserId(loginUser.getUserId());request.getSession().setAttribute("loginStore", store);SavedRequest savedRequest = WebUtils.getSavedRequest(request);String url = "/";if (savedRequest != null) {url = savedRequest.getRequestUrl();if(url.contains(request.getContextPath())){url = url.replace(request.getContextPath(),"");}}if(StringUtils.isEmpty(url) || url.equals("/favicon.ico")){url = "/";}return "redirect:" + url;} catch (UnknownAccountException | IncorrectCredentialsException uae) {model.addAttribute("loginMsg", USERNAME_PASSWORD_NOT_MATCH);return "login";} catch (LockedAccountException lae) {model.addAttribute("loginMsg", "账户已被冻结!");return "login";} catch (AuthenticationException ae) {model.addAttribute("loginMsg", "登录失败!");return "login";}} else {//用户已经登录return "redirect:/index";}}@RequestMapping("/info")public String personInfo(){return "user_info";}/* @RequestMapping("/login1")public String login1(@RequestParam(value = "username", required = false) String username,@RequestParam(value = "password", required = false) String password,Model model, HttpServletRequest request) {if (StringUtils.isEmpty(username)) {model.addAttribute("loginMsg", USERNAME_CANNOT_NULL);return "login";}if (StringUtils.isEmpty(password)) {model.addAttribute("loginMsg", "密码不能为空");return "login";}BSResult<User> bsResult = userService.login(username, password);//登录校验失败if (bsResult.getData() == null) {model.addAttribute("loginMsg", bsResult.getMessage());return "login";}//登录校验成功,重定向到首页User user = bsResult.getData();//置密码为空user.setPassword("");request.getSession().setAttribute("user", user);return "redirect:/";}*///shiro框架帮我们注销@RequestMapping("/logout")@CacheEvict(cacheNames="authorizationCache",allEntries = true)public String logout() {SecurityUtils.getSubject().logout();return "redirect:/page/login";}/*** 注册 检验用户名是否存在** @param username* @return*/@RequestMapping("/checkUserExist")@ResponseBodypublic BSResult checkUserExist(String username) {if (StringUtils.isEmpty(username)) {return BSResultUtil.build(200, USERNAME_CANNOT_NULL, false);}return userService.checkUserExistByUsername(username);}/*** 注册,发激活邮箱** @param user* @return*/@RequestMapping("/register")public String register(User user, Model model) {BSResult isExist = checkUserExist(user.getUsername());//尽管前台页面已经用ajax判断用户名是否存在,// 为了防止用户不是点击前台按钮提交表单造成的错误,后台也需要判断if ((Boolean) isExist.getData()) {user.setActive("1");BSResult bsResult = userService.saveUser(user);//获得未激活的用户User userNotActive = (User) bsResult.getData();/*  try {mailService.sendHtmlMail(user.getEmail(), "<dd书城>---用户激活---","<html><body><a href='http://"+ip+"/user/active?activeCode=" + userNotActive.getCode() + "'>亲爱的" + user.getUsername() +",请您点击此链接前往激活</a></body></html>");} catch (Exception e) {e.printStackTrace();model.addAttribute("registerError", "发送邮件异常!请检查您输入的邮箱地址是否正确。");return "fail";}*/model.addAttribute("username", user.getUsername());return "register_success";} else {//用户名已经存在,不能注册model.addAttribute("registerError", isExist.getMessage());return "register";}}@RequestMapping("/active")public String activeUser(String activeCode, Model model) {BSResult bsResult = userService.activeUser(activeCode);if (!StringUtils.isEmpty(bsResult.getData())) {model.addAttribute("username", bsResult.getData());return "active_success";} else {model.addAttribute("failMessage", bsResult.getMessage());return "fail";}}@RequestMapping("/update")@ResponseBodypublic BSResult updateUser(User user, HttpSession session){User loginUser = (User) session.getAttribute("loginUser");loginUser.setNickname(user.getNickname());loginUser.setLocation(user.getLocation());loginUser.setDetailAddress(user.getDetailAddress());loginUser.setGender(user.getGender());loginUser.setUpdated(new Date());loginUser.setPhone(user.getPhone());loginUser.setIdentity(user.getIdentity());loginUser.setPhone(user.getPhone());BSResult bsResult = userService.updateUser(loginUser);session.setAttribute("loginUser", loginUser);return bsResult;}@RequestMapping("/password/{userId}")@ResponseBodypublic BSResult changePassword(@PathVariable("userId") int userId,String oldPassword,String newPassword){if(StringUtils.isEmpty(oldPassword) || StringUtils.isEmpty(newPassword)){return BSResultUtil.build(400, "密码不能为空");}return userService.compareAndChange(userId,oldPassword,newPassword);}}

订单信息控制层:

@Controller
@RequestMapping("/order")
public class OrderController {@Autowiredprivate IOrderService orderService;@Autowiredprivate ICartService cartService;@Autowiredprivate IBookInfoService bookInfoService;/*** 填写订单信息页面** @param bookId* @param buyNum* @param request* @return*/@GetMapping("/info")public String orderInfo(@RequestParam(required = false, defaultValue = "0") int bookId,@RequestParam(required = false, defaultValue = "0") int buyNum,HttpServletRequest request) throws BSException {if (bookId != 0) {//点了立即购买,放到request域中,也session的立即购买域中以区分购物车中的书籍BookInfo bookInfo = bookInfoService.findById(bookId);if (bookInfo != null) {BSResult bsResult = cartService.addToCart(bookInfo, null, buyNum);request.getSession().setAttribute("buyNowCart", bsResult.getData());request.setAttribute("cart", bsResult.getData());return "order_info";} else {request.setAttribute("exception", "不好意思,书籍库存不足或不存在了!");return "exception";}}//没有点立即购买,购物车中的总金额大于0才让填写订单信息Cart cart = (Cart) request.getSession().getAttribute("cart");if (cart != null && cart.getTotal() > 0) {return "order_info";} else {return "cart";}}@GetMapping("/payPage/{orderId}")public String toPay(@PathVariable("orderId") String orderId, Model model) {BSResult bsResult = orderService.findOrderById(orderId);if (bsResult.getCode() == 200) {model.addAttribute("order", bsResult.getData());return "payment";}return "exception";}@RequestMapping("/deletion/{orderId}")public String deletion(@PathVariable("orderId") String orderId) {BSResult bsResult = orderService.deleteOrder(orderId);if (bsResult.getCode() == 200) {return "redirect:/order/list";}return "exception";}/*** 订单列表** @return*/@GetMapping("/list")public String orderList(HttpServletRequest request) {User loginUser = (User) request.getSession().getAttribute("loginUser");List<OrderCustom> orderCustoms = orderService.findOrdersByUserId(loginUser.getUserId());request.setAttribute("orderCustoms", orderCustoms);return "order_list";}/*** 创建订单** @return*/@PostMapping("/creation")public String createOrder(User userDTO, String express, int payMethod, HttpServletRequest request) {//立即购买,优先创建订单Cart buyNowCart = (Cart) request.getSession().getAttribute("buyNowCart");User loginUser = (User) request.getSession().getAttribute("loginUser");userDTO.setUserId(loginUser.getUserId());userDTO.setZipCode(loginUser.getZipCode());if (buyNowCart != null) {BSResult bsResult = orderService.createOrder(buyNowCart, userDTO, express, payMethod);if (bsResult.getCode() == 200) {request.setAttribute("order", bsResult.getData());cartService.clearCart(request, "buyNowCart");return "payment";} else {request.setAttribute("exception", bsResult.getMessage());return "exception";}}//普通购物车Cart cart = (Cart) request.getSession().getAttribute("cart");if (cart != null) {BSResult bsResult = orderService.createOrder(cart, userDTO, express, payMethod);if (bsResult.getCode() == 200) {request.setAttribute("order", bsResult.getData());cartService.clearCart(request, "cart");return "payment";} else {request.setAttribute("exception", bsResult.getMessage());return "exception";}} else {request.setAttribute("exception", "购物车为空!");return "exception";}}/*** 确认收货** @param orderId* @return*/@RequestMapping("/confirm/{orderId}")public String confirmReceiving(@PathVariable("orderId") String orderId, Model model) {BSResult bsResult = orderService.confirmReceiving(orderId);if (bsResult.getCode() == 200) {return "redirect:/order/list";} else {model.addAttribute("exception", bsResult.getMessage());return "exception";}}
}

书籍详情控制层:

@Controller
@RequestMapping("/book")
public class BookInfoController {@Autowiredprivate IBookInfoService bookInfoService;@Autowiredprivate BookDescMapper bookDescMapper;/*** 查询某一本书籍详情** @param bookId* @param model* @return*/@RequestMapping("/info/{bookId}")public String bookInfo(@PathVariable("bookId") Integer bookId, Model model) throws BSException {//查询书籍BookInfo bookInfo = bookInfoService.findById(bookId);//查询书籍推荐列表List<BookInfo> recommendBookList = bookInfoService.findBookListByCateId(bookInfo.getBookCategoryId(), 1, 5);//查询书籍详情BookDesc bookDesc = bookDescMapper.selectByPrimaryKey(bookId);//增加访问量bookInfoService.addLookMount(bookInfo);Collections.shuffle(recommendBookList);model.addAttribute("bookInfo", bookInfo);model.addAttribute("bookDesc", bookDesc);model.addAttribute("recommendBookList", recommendBookList);return "book_info";}/*** 通过关键字和书籍分类搜索书籍列表** @param keywords* @return*/@RequestMapping("/list")public String bookSearchList(@RequestParam(defaultValue = "", required = false) String keywords,@RequestParam(defaultValue = "0", required = false) int cateId,//分类Id,默认为0,即不按照分类Id查@RequestParam(defaultValue = "1", required = false) int page,@RequestParam(defaultValue = "6", required = false) int pageSize,Model model) {keywords = keywords.trim();PageInfo<BookInfo> bookPageInfo = bookInfoService.findBookListByCondition(keywords, cateId, page, pageSize,0);//storeId为0,不按照商店Id查询model.addAttribute("bookPageInfo", bookPageInfo);model.addAttribute("keywords", keywords);model.addAttribute("cateId", cateId);return "book_list";}}

源码获取:博客首页 "资源" 里下载!

Java项目:电商书城平台系统设计和实现(java+springboot+mysql+spring+jsp)相关推荐

  1. 基于JAVA springboot+mybatis 电商书城平台系统设计和实现

     本项目演示地址链接  > 主要实现了书城网站的浏览.加入购物车操作.订单操作.支付操作.分类查看.搜索.以及后台上传图书信息以及订单管理和一些基本操作功能 摘要信息: 随着市场经济的逐渐形成, ...

  2. Java项目:美食菜谱分享平台系统设计和实现(java+springboot+mysql+ssm)

    源码获取:博客首页 "资源" 里下载! 主要技术实现:spring. springmvc. springboot.mybatis .session. jquery . md5 .b ...

  3. java农场商城 生鲜超市 水果蔬菜电商网站平台系统设计与实现 项目源代码下载 javaweb jsp ssm mysql

    1 前端商城界面 1.1 商城首页 首页导航上有五个按钮,分别显示产品分类.商城首页.今日推荐.热销排行.新品上市,五个推荐类目的商品列表 首页很长说明书中1和2页均是首页,分六个部分,分别是今日推荐 ...

  4. JAVA助农电商商城平台毕业设计,JAVA助农销售网站系统设计与实现,毕设作品参考

    功能清单 [后台管理功能模块] 系统设置:设置关于我们.联系我们.加入我们.法律声明的信息. 广告管理:设置网站首页轮播图和链接地址. 留言管理:显示用户通过前台留言的列表,支持删除. 会员中心:显示 ...

  5. Java项目:宠物医院预约管理系统设计和实现(java+springboot+mysql+ssm)

    源码获取:博客首页 "资源" 里下载! 项目使用java SpringMVC.springboot mybatis.layui为核心技术编写 首页登录有可爱的小猫咪: 系统主页主要 ...

  6. Java项目:爱游旅行平台设计和实现(java+springboot+ssm)

    源码获取:博客首页 "资源" 里下载! 项目意义: 改革开放以来, 我国的旅游业发展迅速,但比较而言,我国旅游业发展的广度和深度都远远不能满足经济发展和人民生活水平提高的需要. 随 ...

  7. Java项目:在线嘿嘿网盘系统设计和实现(java+Springboot+ssm+mysql+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能:用户的邮箱注册.验证码验证以及用户登录. 不需要注册账号,也可以上传满足条件的临时文件,但是 只4小时内有效. 文件的管 ...

  8. Java项目:精美网上音乐平台(前后端分离+java+vue+Springboot+ssm+mysql+maven+redis)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统功能包括: 音乐播放 用户登录注册 用户信息编辑.头像修改 歌曲.歌单搜索 歌单打分 歌单.歌曲评论 歌单列表.歌手列表 ...

  9. Java项目:前台+后台在线考试系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 本系统主要实现的功能有: 学生以及老师的注册登录,在线考试,错题查询,学生管理,问题管理,错题管理,错题查询,分数查询,试卷管 ...

最新文章

  1. 使用datatables实现列宽设置、水平滚动条、显示某列部分内容
  2. 数据库字典php样色,使用PHP一键生成MySQL数据库字典
  3. 利用Python实现gif动图倒放
  4. 怎么得到scrollTop
  5. Hibernate 多表关联
  6. 罗马仕php30重量,充电宝多少毫安最好?这3款罗马仕充电宝必须收藏
  7. 打包外星人_《疯狂外星人》中外星人带上金箍就是大圣,放下金箍就是至尊宝!...
  8. 0.42-0.5+0.08与0.08-0.5+0.42是不完全相等,Why is 0.3 - 0.2 - 0.1 (or similar) not equal to zero?
  9. socket相关的面试题
  10. 中介效应分析及R实现
  11. mysql不停库全量备份,mysql全量备份数据
  12. STM32控制TFTLCD显示屏(理论)
  13. 海康监控如何设置STMP邮箱报警
  14. 中餐厅服务器维护,《中餐厅5》首播,龚俊仅出镜10分钟,两个细节表明他恐不会常驻...
  15. Kubernetes调度之亲和性和反亲和性
  16. 阿里架构师的炫技与克制:代码的两种味道与态度
  17. QuickFIX 源码分析
  18. 基于众包采集定量数据的自适应结果推理
  19. 铁道飞虎[Railroad Tigers]
  20. 吴恩达深度学习L2W1总结

热门文章

  1. Redis在CentOS 6.8中的安装方法,JAVA初级使用Redis连接池
  2. libcurl选项CURLOPT_WRITEDATA中的“坑”
  3. dedecms部分文章出现读取附加信息出错的解决办法
  4. Arcmap技巧总结
  5. CMakeLists.txt学习记录
  6. eclipse 和 google拼音输入法冲突问题
  7. 阿里巴巴开源的缓存框架JetCache创建缓存
  8. JDK源码分析 NIO实现
  9. Varnish purges 缓存清除
  10. ASP.NET实现数据图表