我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot+微信小程序在线订餐小程序系统 附带详细运行指导视频

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot+微信小程序在线订餐小程序系统 附带详细运行指导视频

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+微信小程序框架开发的在线订餐小程序系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个在线订餐小程序系统该有的所有功能。

项目功能:此项目分为两个角色:普通用户管理员普通用户有登录注册、浏览商品信息、添加购物车、结算订单、查看个人信息、查看个人订单详情、管理个人地址信息、发布评价信息等等功能。管理员有管理所有商品信息、管理所有订单信息、管理所有用户信息、管理所有评价信息等等功能。

应用技术:SpringBoot + 微信小程序 + MySQL + MyBatis + Redis + ElementUI + Lua + Vue + Vant Weapp

运行环境:IntelliJ IDEA2019.3.5 + 微信开发者工具(项目压缩包中自带)+ MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node14.16.1(项目压缩包中自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1.提交订单代码

    @Override    public ResponseDTO submitOrder(OrderDTO orderDTO) {        UserDTO userDTO = new UserDTO();        userDTO.setToken(orderDTO.getToken());        ResponseDTO loginUserResponse = userService.getLoginUser(userDTO);        if(!CodeMsg.SUCCESS.getCode().equals(loginUserResponse.getCode())) {            return ResponseDTO.errorByMsg(CodeMsg.USER_SESSION_EXPIRED);        }        // 获取登录用户信息        userDTO = loginUserResponse.getData();        AddressExample addressExample = new AddressExample();        addressExample.createCriteria().andUserIdEqualTo(userDTO.getId());        if(addressMapper.selectByExample(addressExample).size() == 0) {            return ResponseDTO.errorByMsg(CodeMsg.ADDRESS_NOT_EXIST);        }        String[] cartIdList = orderDTO.getCartIdList().split(",");        CartExample cartExample = new CartExample();        cartExample.createCriteria().andIdIn(Arrays.stream(cartIdList).collect(Collectors.toList()));        List cartList = cartMapper.selectByExample(cartExample);        List productIdList = cartList.stream().map(Cart::getProductId).collect(Collectors.toList());        ProductExample productExample = new ProductExample();        productExample.createCriteria().andIdIn(productIdList);        List productList = productMapper.selectByExample(productExample);        List productNameList = productList.stream().map(Product::getName).collect(Collectors.toList());        List productPriceList = productList.stream().map(Product::getPrice).map(String::valueOf).collect(Collectors.toList());        List productPhotoList = productList.stream().map(Product::getPhoto).map(String::valueOf).collect(Collectors.toList());        List cartQuantityList = cartList.stream().map(Cart::getQuantity).map(String::valueOf).collect(Collectors.toList());        String orderId = UuidUtil.getShortUuid();        String orderDate = CommonUtil.getFormatterDate(new Date(), "yyyy-MM-dd HH:mm:ss");        // 执行lua脚本        String result = stringRedisTemplate.execute(                SECKILL_SCRIPT,                Collections.singletonList(RedisConstant.STOCK_REDIS_KEY_TEMPLATE),                StringUtils.join(productIdList, ","),                StringUtils.join(productNameList, ","),                StringUtils.join(cartQuantityList, ","),                orderId,                userDTO.getId(),                orderDate,                StringUtils.join(productPriceList, ","),                StringUtils.join(productPhotoList, ","),                StringUtils.join(Arrays.asList(cartIdList), ",")        );        if(!"成功".equals(result)) {            CodeMsg codeMsg = CodeMsg.PRODUCT_STOCK_OVER;            codeMsg.setMsg(result);            return ResponseDTO.errorByMsg(codeMsg);        }        orderDTO.setId(orderId);        return ResponseDTO.success(orderDTO);    }

2.购物车保存操作(添加、减少)代码

     @Override    public ResponseDTO saveCart(CartDTO cartDTO) {        UserDTO userDTO = new UserDTO();        userDTO.setToken(cartDTO.getToken());        ResponseDTO loginUserResponse = userService.getLoginUser(userDTO);        if(!CodeMsg.SUCCESS.getCode().equals(loginUserResponse.getCode())) {            return ResponseDTO.errorByMsg(CodeMsg.USER_SESSION_EXPIRED);        }        // 获取登录用户信息        userDTO = loginUserResponse.getData();        cartDTO.setUserId(userDTO.getId());        Product product = productMapper.selectByPrimaryKey(cartDTO.getProductId());        if (product == null) {            return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_NOT_EXIST);        }        Cart cart = CopyUtil.copy(cartDTO, Cart.class);        // 判断购物车是否已经有此商品        CartExample cartExample = new CartExample();        cartExample.createCriteria().andProductIdEqualTo(cartDTO.getProductId()).andUserIdEqualTo(cartDTO.getUserId());        List cartList = cartMapper.selectByExample(cartExample);        if(cartList.size() > 0) {            // 购物车中已经有此商品            if(CartOperateEnum.ADD.getCode().equals(cartDTO.getOperateType())) {                // 添加操作                if(cart.getQuantity() + cartList.get(0).getQuantity() > product.getStock()) {                    return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_STOCK_OVER);                }                cartList.get(0).setQuantity(cart.getQuantity() + cartList.get(0).getQuantity());            } else if (CartOperateEnum.SUB.getCode().equals(cartDTO.getOperateType())) {                // 减少操作                if(cartList.get(0).getQuantity() <= cart.getQuantity()) {                    // 删除                    CartDTO copy = CopyUtil.copy(cartList.get(0), CartDTO.class);                    copy.setToken(cartDTO.getToken());                    removeCart(copy);                    return ResponseDTO.successByMsg(true, "购物车操作成功!");                } else {                    cartList.get(0).setQuantity(cartList.get(0).getQuantity() - cart.getQuantity());                }            }            // 更新数据            if(cartMapper.updateByPrimaryKeySelective(cartList.get(0)) == 0) {                return ResponseDTO.errorByMsg(CodeMsg.CART_SAVE_ERROR);            }        } else {            // 购物车中没有此商品            if(product.getStock() == 0) {                return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_STOCK_OVER);            }            cart.setId(UuidUtil.getShortUuid());            // 添加数据            if(cartMapper.insertSelective(cart) == 0) {                return ResponseDTO.errorByMsg(CodeMsg.CART_SAVE_ERROR);            }        }        return ResponseDTO.successByMsg(true, "购物车操作成功!");    }

3.小程序登录操作代码

    @Override    public ResponseDTO appLogin(UserDTO userDTO) {        // 进行是否为空判断        if(CommonUtil.isEmpty(userDTO.getUsername())){            return ResponseDTO.errorByMsg(CodeMsg.USERNAME_EMPTY);        }        if(CommonUtil.isEmpty(userDTO.getPassword())){            return ResponseDTO.errorByMsg(CodeMsg.PASSWORD_EMPTY);        }        // 对比昵称和密码是否正确        UserExample userExample = new UserExample();        userExample.createCriteria().andUsernameEqualTo(userDTO.getUsername()).andPasswordEqualTo(userDTO.getPassword());        List userList = userMapper.selectByExample(userExample);        if(userList == null || userList.size() != 1){            return ResponseDTO.errorByMsg(CodeMsg.USERNAME_PASSWORD_ERROR);        }        // 生成登录token并存入Redis中        User selectedUser = userList.get(0);        UserDTO selectedUserDTO = CopyUtil.copy(selectedUser, UserDTO.class);        String token = UuidUtil.getShortUuid();        selectedUserDTO.setToken(token);        //把token存入redis中 有效期1小时        stringRedisTemplate.opsForValue().set("USER_" + token, JSON.toJSONString(selectedUser), 3600, TimeUnit.SECONDS);        return ResponseDTO.successByMsg(selectedUserDTO, "登录成功!");    }

来源地址:https://blog.csdn.net/dgfdhgghd/article/details/131496005

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot+微信小程序在线订餐小程序系统 附带详细运行指导视频

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot+微信小程序在线订餐小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBoot+微信小程序框架开发的在线订餐小程序系统。首先,这是一个前后端分离的项目
2023-08-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录