点餐小程序,点餐系统,管理后台批量导入excel菜品数据

点餐系统上线这段时间,有好多同学反馈,是否可以添加一个菜品批量导入的功能。由于平时比较忙,一直没有时间把菜品批量导入的功能加进来。今天正好空出来时间了,就来教大家实现下菜品批量导入的功能。 后面会把这节功能录制成视频放到点餐系统的课程里。

传送门:" rel="nofollow">点餐系统,java后台+点餐小程序

老规矩,先看效果图

选择excel菜品

导入数据成功

之前有看过我课程的同学肯定知道,我之前是没有批量导入的类目的,不错,这个类目就是我们今天新加的功能。

实现步骤很简单:

  • 1,点击导入按钮选择excel
  • 2,导入成功后调转到商品列表页。

下面我们就来具体讲解下实现步骤

一,引入excel操作类库

我们这里主要用到了下面红框里的两个类库

类库写在pom.xml里,不要忘记做ReImport操作

二,添加导入excel的后台网页

添加菜品类目导入页

添加商品(菜品)导入页

上面的代码,我会加入到点餐系统里,有购买点餐系统课程的同学,去刷新下之前的网盘链接即可获取最新代码。

三,编写ExcelUtil工具类

把完整代码给大家贴出来,其实很简单,就是在工具类里定义一个导入菜品类目和菜品的方法。

注意:对应的导入方法是解析excel里的数据,所以你的excel数据必须和我的保持一致,就是第几列是什么数据,要和我的对应起来。要不然会导致数据存错的问题。

package com.qcl.utils;

import com.qcl.dataobject.ProductCategory;
import com.qcl.dataobject.ProductInfo;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.InputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import lombok.extern.slf4j.Slf4j;

/*
 * 操作excel
 * */
@Slf4j
public class ExcelUtils {

    /*
     * 菜品类目批量导入
     * 要求
     * 1,必须以.xlsx结尾的excel文件
     * 2,表格内容必须按照下面顺序
     * 0:类目名,1:type值
     *
     * */
    public static List<ProductCategory> excelToProductCategoryList(InputStream inputStream) {
        List<ProductCategory> list = new ArrayList<>();
        Workbook workbook = null;
        try {
            workbook = WorkbookFactory.create(inputStream);
            inputStream.close();
            //工作表对象
            Sheet sheet = workbook.getSheetAt(0);
            //总行数
            int rowLength = sheet.getLastRowNum();
            System.out.println("总行数有多少行" + rowLength);
            //工作表的列
            Row row = sheet.getRow(0);

            //总列数
            int colLength = row.getLastCellNum();
            System.out.println("总列数有多少列" + colLength);
            //得到指定的单元格
            Cell cell = row.getCell(0);
            for (int i = 1; i <= rowLength; i++) {
                ProductCategory goodInfo = new ProductCategory();
                row = sheet.getRow(i);
                for (int j = 0; j < colLength; j++) {
                    cell = row.getCell(j);
                    if (cell != null) {
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        String data = cell.getStringCellValue();
                        data = data.trim();
                        //列:0:类目名,1:type值
                        if (j == 0) {
                            goodInfo.setCategoryName(data);
                        } else if (j == 1) {
                            goodInfo.setCategoryType(Integer.parseInt(data));
                        }
                    }
                }
                list.add(goodInfo);
//                log.error("每行数据={}", menuInfo);
            }
        } catch (Exception e) {
            log.error("excel导入抛出的错误={}", e);
        }
        return list;
    }

    /*
     * 菜品(商品)批量导入
     * 要求
     * 1,必须以.xlsx结尾的excel文件
     * 2,表格内容必须按照下面顺序
     * 0商品名,1单价,2库存,3类目,4描述,5图片链接
     *
     * */
    public static List<ProductInfo> excelToProductInfoList(InputStream inputStream) {
        List<ProductInfo> list = new ArrayList<>();
        Workbook workbook = null;
        try {
            workbook = WorkbookFactory.create(inputStream);
            inputStream.close();
            //工作表对象
            Sheet sheet = workbook.getSheetAt(0);
            //总行数
            int rowLength = sheet.getLastRowNum();
            //工作表的列
            Row row = sheet.getRow(0);
            //总列数
            int colLength = row.getLastCellNum();
            //得到指定的单元格
            Cell cell = row.getCell(0);
            for (int i = 1; i <= rowLength; i++) {
                ProductInfo goodInfo = new ProductInfo();
                row = sheet.getRow(i);
                for (int j = 0; j < colLength; j++) {
                    cell = row.getCell(j);
                    if (cell != null) {
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                        String data = cell.getStringCellValue();
                        data = data.trim();
                        //列: 0商品名,1单价,2库存,3类目,4描述,5图片链接
                        if (j == 0) {
                            goodInfo.setProductId(KeyUtil.genUniqueKey());
                            goodInfo.setProductName(data);
                        } else if (j == 1) {
                            goodInfo.setProductPrice(new BigDecimal(data));
                        } else if (j == 2) {
                            goodInfo.setProductStock(Integer.parseInt(data));
                        } else if (j == 3) {
                            goodInfo.setCategoryType(Integer.parseInt(data));
                        } else if (j == 4) {
                            goodInfo.setProductDescription(data);
                        } else if (j == 5) {
                            goodInfo.setProductIcon(data);
                        }
                    }
                }
                list.add(goodInfo);
            }
        } catch (Exception e) {
            log.error("excel导入抛出的错误={}", e);
        }
        return list;
    }
}

四,编写对应的接口

上面的工具类封装好以后,我们接下来就需要在对应的Controller类里添加导入数据的方法了。

  • 1,导入菜品类目

    主要编写上图所示的两个方法 一个是打开导入的网页,另外一个是实现导入数据的功能。完整代码贴出来给大家

    /*
     * excel导入网页
     * */
    @GetMapping("/excel")
    public ModelAndView excel(Map<String, Object> map) {
        return new ModelAndView("category/excel", map);
    }
    
    /*
     * 批量导入excel里的菜品类目到数据库
     * */
    @RequestMapping("/uploadExcel")
    @ResponseBody
    public ModelAndView uploadExcel(@RequestParam("file") MultipartFile file,
                                    Map<String, Object> map) {
        String name = file.getOriginalFilename();
        if (name.length() < 6 || !name.substring(name.length() - 5).equals(".xlsx")) {
            map.put("msg", "文件格式错误");
            map.put("url", "/sell/seller/category/excel");
            return new ModelAndView("common/error", map);
        }
        List<ProductCategory> list;
        try {
            list = ExcelUtils.excelToProductCategoryList(file.getInputStream());
            log.info("excel导入的list={}", list);
            if (list == null || list.size() <= 0) {
                map.put("msg", "导入失败");
                map.put("url", "/sell/seller/category/excel");
                return new ModelAndView("common/error", map);
            }
            //excel的数据保存到数据库
            try {
                for (ProductCategory excel : list) {
                    if (excel != null) {
                        //如果类目type值已存在,就不再导入
                        List typeList = categoryService.findOneByType(excel.getCategoryType());
                        log.info("查询类目type是否存在typeList={}", typeList);
                        if (typeList == null || typeList.size() < 1) {
                            System.out.println("保存成功");
                            categoryService.save(excel);
                        }
                    }
                }
            } catch (Exception e) {
                log.error("某一行存入数据库失败={}", e);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("msg", e.getMessage());
            map.put("url", "/sell/seller/category/excel");
            return new ModelAndView("common/error", map);
        }
        map.put("url", "/sell/seller/category/list");
        return new ModelAndView("common/success", map);
    }
  • 2,导入菜品数据

    代码也给大家贴出来
    /*
     * excel导入网页
     * */
    @GetMapping("/excel")
    public ModelAndView excel(Map<String, Object> map) {
        return new ModelAndView("product/excel", map);
    }
    
    /*
     * 批量导入excel里的菜品(商品)到数据库
     * */
    @RequestMapping("/uploadExcel")
    @ResponseBody
    public ModelAndView uploadExcel(@RequestParam("file") MultipartFile file,
                                    Map<String, Object> map) {
        String name = file.getOriginalFilename();
        if (name.length() < 6 || !name.substring(name.length() - 5).equals(".xlsx")) {
            map.put("msg", "文件格式错误");
            map.put("url", "/sell/seller/product/excel");
            return new ModelAndView("common/error", map);
        }
        List<ProductInfo> list;
        try {
            list = ExcelUtils.excelToProductInfoList(file.getInputStream());
            log.info("excel导入的list={}", list);
            if (list == null || list.size() <= 0) {
                map.put("msg", "导入失败");
                map.put("url", "/sell/seller/product/excel");
                return new ModelAndView("common/error", map);
            }
            //excel的数据保存到数据库
            try {
                for (ProductInfo excel : list) {
                    if (excel != null) {
                        //如果类目type值已存在,就不再导入
                        productService.save(excel);
                    }
                }
            } catch (Exception e) {
                log.error("某一行存入数据库失败={}", e);
            }
    
        } catch (Exception e) {
            e.printStackTrace();
            map.put("msg", e.getMessage());
            map.put("url", "/sell/seller/product/excel");
            return new ModelAndView("common/error", map);
        }
        map.put("url", "/sell/seller/product/list");
        return new ModelAndView("common/success", map);
    }

到这里我们就完整的实现了点餐系统批量导入菜品数据到数据库的功能了。

完整的代码我会放到点餐系统里,购买我点餐系统课程的同学,记得去刷新下之前的网盘链接,就可以获取最新的代码了

演示视频也已经录制出来了,大家可以去看下

https://edu.51cto.com/course/19004.html

完整的点餐系统,包含Java后台和扫码点餐小程序,效果图如下。

原文地址:https://blog.51cto.com/14368928/2468941

时间: 2024-10-07 17:21:51

点餐小程序,点餐系统,管理后台批量导入excel菜品数据的相关文章

小程序新零售系统能给企业带来哪些效益

小程序新零售系统怎么帮助企业结合O2O 1.小程序新零售系统的核心模式,新零售=大数据 线上交易平台 线下的体验平台.支付.最有效的物流整合, 线上与线下渠道的打通,以大数据作为指引,以支付和物流作为完成闭环的一节,这五步,构成了未来新零售的骨骼. 2.是消费者的诉求驱动了生产链.刘兴波并不觉得销售传统如人们所说的被颠覆了,反而只是市场的一种进步,是消费习惯和销售形态之间的共同进步.人们逐渐迁移至移动端,更加数字化,产生了更强的主观意识,而"现代人"自主的生活方式探寻出了新零售的发展方

小程序点餐系统app平台

微信小程序已经上线半年了(陈琦:138-2848-7919 可微)在过去的半年里这个超级流量入口微信小程序在不断的完善,不断的开放多种功能,从而实现颠覆线下实体的梦想,那么对于餐饮行业如何借助小程序这个超级流量入口来让销量暴增呢?赢在移动小程序点餐系统通过在点餐.排队等功能借助小程序的能力,让餐饮商户实现高效运营. 一.小程序点餐系统有哪些功能? 1.扫码下单:节省点餐时间 在高峰期,顾客可在排队期间通过手机扫描餐厅门口展架上的二维码,进入点餐小程序,率先查看菜单,进行预先点餐,热销菜.创意菜.

小程序点餐系统开发软件

小程序点餐系统开发(陈琦:138-2848-7919可微)小程序点餐APP平台,小程序点餐模式开发,小程序点餐系统模式,小程序点餐定制开发,小程序点餐商城开发,小程序点餐开发软件 微信小程序已经上线半年了在过去的半年里这个超级流量入口微信小程序在不断的完善,不断的开放多种功能,从而实现颠覆线下实体的梦想,那么对于餐饮行业如何借助小程序这个超级流量入口来让销量暴增呢?小程序点餐系统通过在点餐.排队等功能借助小程序的能力,让餐饮商户实现高效运营. 一.小程序点餐系统有哪些功能? 1.扫码下单:节省点

小程序点餐系统开发app

小程序点餐系统开发(陈琦:138-2848-7919可微)小程序点餐平台APP,小程序点餐定制开发,小程序点餐系统模式,小程序点餐模式开发,小程序点餐商城开发,小程序点餐开发软件 微信小程序已经上线半年了在过去的半年里这个超级流量入口微信小程序在不断的完善,不断的开放多种功能,从而实现颠覆线下实体的梦想,那么对于餐饮行业如何借助小程序这个超级流量入口来让销量暴增呢?小程序点餐系统通过在点餐.排队等功能借助小程序的能力,让餐饮商户实现高效运营. 一.小程序点餐系统有哪些功能? 1.扫码下单:节省点

小程序点餐系统参考

1.小程序点餐系统http://bbs.html51.com/t-2119-1-1/ 2.微信点餐系统 http://www.xfrsoft.com/a/youxi/1205.html 原文地址:https://www.cnblogs.com/yangchunlong/p/8135845.html

开发一个小程序点餐系统多少钱?

餐饮行业开发一个类似美团的点餐外卖小程序,属于自己的平台,不需要缴纳各种费用,而且背靠微信,有充足的流量为后盾,可谓一举多得.那么小程序点餐系统多少钱?开发小程序+点餐系统价格多少? 微信点餐外卖小程序优势: 1.开放的用户体系:点餐小程序无需登录,直接采用微信账号体系,极大降低用户首次使用门槛,同时方便用户信息收集. 2.分享红利:小程序可方便分享到微信个人和群聊窗口,会话中点击即用,非常方便传播. 3.线上线下打通:小程序最佳入口是扫描二维码,线下用户只需简单扫码,即可转换为小程序用户. 4

点餐小程序APP开发

随着移动互联网时代的来临,百度.腾讯.阿里.小米等企业正以迅雷不及掩耳之势的速度在跨界经营,利用互联网思维在改变整个世界和生活消费习惯.而传统企业生出了浓浓的危机感. 每到饭点时间,店里定会坐满人.顾客多,服务员人手不够,呼唤N遍服务员,也不见有人来,于是就引发了店顾客的各种抱怨.作为餐企经营者,你一定深有体会.面对上述餐企经营者的痛点,赢在移动推出了基于微信的小程序,即点餐微信小程序,桌台扫码点餐,免去顾客排队等待的烦恼.开发点餐小程序:136.0000.5242微电都可. 一.,赢在移动小程

点餐小程序开发详情

互联网认为数量多的是影响力大的.点餐小程序开发详情(178.1718.1752可微)点餐小程序开发.点餐小程序系统开发.微信点餐小程序开发它的一个好处,做到了广覆盖.原来一些优秀的传统媒体,发行量可能没有超过百万的,比如<财经>杂志,或者<南方周末>,都是在几十万的数量级.从中国的人口基数来讲,覆盖率非常少,少的可怜.但是这不影响它的影响力,如果它做了一个好的选题,或者做了一篇有质量的封面文章,在高端人群里面的传播力往往是非常好的. 餐饮是传统行业最典型的代表,微信小程序和餐饮碰撞

微信点餐小程序项目+毕业论文

好久之前写的微信点餐小程序项目了.大学也没学到多少东西,大三才开始认真的学习微信小程序开发,也是为了自己的毕业设计着想.随着互联网时代的到来,人们对网络了依赖度大大提高,越来越喜欢更便捷的消费方式.试想我们到餐馆消费,拿出手机扫一下二维码就可以排号.查看排队情况.查看菜单.点菜.买单,是不是很方便快捷?对餐厅的管理者来说,不需要开发或购买专门的排队软件,不需要添加额外的硬件设施,让用户扫一扫即可排号.点菜,随用随走.用户使用过小程序后,使用记录会留在微信的小程序列表中,方便用户再次使用,这又能增