ssm项目笔记(五)预约管理预约设置

1.需求分析

前面我们已经完成了检查项管理、检查组管理、套餐管理等。接下来我们需要进行预约设置,其实就是设置每一天的体检预约最大数量。客户可以通过微信端在线预约,在线预约时需要选择体检的时间,如果客户选择的时间已经预约满则无法进行预约。

Apache POI

介绍:

Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。

jxl:专门操作Excel

依赖:

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi</artifactId>
  <version>3.14</version>
</dependency>
<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.14</version>
</dependency>

POI结构

入门案列:

1.1从Excel文件读取数据

使用POI可以从一个已经存在的Excel文件中读取数据

package com.itheima;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;

import java.io.IOException;

/***
 * POI的入门案例
 */
public class Demo01 {
    /***
     * 方式一:读取Excel
     * 1.获取Excel对象
     * 2.获取sheet标签页
     * 3.循环sheet标签页,遍历每一行纪录
     * 4.循环行,遍历每一个单元格数据输出
     * @throws IOException
     */
   @Test
    public  void Demo01() throws IOException {
       final XSSFWorkbook workbook;
       try {
           //1.创建工作簿
           workbook = new XSSFWorkbook("C:\\Users\\ASUS\\OneDrive\\文档\\传值健康day05\\资料\\hello.xlsx");
           //2.获取工作表,既可以根据工作表的顺序获取,也可以根据工作表的名称获取
           final XSSFSheet sheet = workbook.getSheetAt(0);
           //遍历
           for (Row cells : sheet) {
               //遍历行对象获取单元格对象
               for (Cell cell : cells) {
                   //获取单元格里面的值
                   final String value = cell.getStringCellValue();
                   System.out.println(value);
               }
           }
           //关闭流
           workbook.close();
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}

1.2第二种读取方式

还有一种方式就是获取工作表最后一个行号,从而根据行号获得行对象,通过行获取最后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:

 /***
     * 第二种方式:
     * 获取工作表中最后一个符号,从而获得行对象
     */
    @Test
    public void Demo02() {
        try {
            //创建工作簿
            final XSSFWorkbook workbook = new XSSFWorkbook("C:\\Users\\ASUS\\OneDrive\\文档\\传值健康day05\\资料\\hello.xlsx");
            //获取工作表,既可以根据工作表中得顺序获取
            final XSSFSheet sheetAt = workbook.getSheetAt(0);
            //获取当前工作表中最后一行的行号,行号从0开始
            final int lastRowNum = sheetAt.getLastRowNum();
            for (int i = 0; i <= lastRowNum; i++) {
                //根据行号获取对象
                final XSSFRow row = sheetAt.getRow(i);
                final short firstCellNum = row.getFirstCellNum();
                for (short j = 0; j < firstCellNum; j++) {
                    final String value = row.getCell(j).getStringCellValue();
                    System.out.println(value);
                }
            }
            //关闭流
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
}

1.3向Excel文件写入数据

使用POI可以在内存中创建一个Excel文件数据写入到这个文件,最后通过输出流将内存中的Excel文件下载到磁盘

 /***
     * 向Excel中写入文件
     */
    @Test
    public void Demo03() throws Exception {
        //在内存中创建一个Excel文件
        final XSSFWorkbook workbook = new XSSFWorkbook();
        //创建工作表,指定工作表名称
        final XSSFSheet sheet = workbook.createSheet("大帅哥");
        //创建行,0表示第一行
        final XSSFRow row = sheet.createRow(0);
        //创建单元格,0表示第一个单元格
        row.createCell(0).setCellValue("编号");
        row.createCell(1).setCellValue("名称");
        row.createCell(2).setCellValue("年龄");

        final XSSFRow row1 = sheet.createRow(1);
        row1.createCell(0).setCellValue("1");
        row1.createCell(1).setCellValue("小明");
        row1.createCell(2).setCellValue("10");

        final XSSFRow row2 = sheet.createRow(2);
        row2.createCell(0).setCellValue("2");
        row2.createCell(1).setCellValue("小郑");
        row2.createCell(2).setCellValue("18");

        final XSSFRow row3 = sheet.createRow(3);
        row3.createCell(0).setCellValue("3");
        row3.createCell(1).setCellValue("小亮");
        row3.createCell(2).setCellValue("18");

        //通过输出流将workbook对象下载到磁盘
        final FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\ASUS\\OneDrive\\文档\\xlsx\\1.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.flush();
        fileOutputStream.close();
        workbook.close();


    }

批量导入预约设置信息

前端代码

1.1分析

预约设置信息对应的数据表为t_ordersetting,预约设置操作对应的页面为ordersetting.html

数据表为:

orderDate:预约日期

number:可预约人数

reservations:已预约人数

 

批量导入预约设置信息操作过程:

1、点击模板下载按钮下载Excel模板文件

2、将预约设置信息录入到模板文件中

3、点击上传文件按钮将录入完信息的模板文件上传到服务器

4、通过POI读取上传文件的数据并保存到数据库

图片解析:

1.2提供模板文件

放在的目录

1.3实现模板文件下载

为模板下载按钮绑定事件实现模板文件下载

模板文件下载

1.4文件上传

使用ElementUI的上传并绑定相关的事件

文件上传成功提示

上传之前进行文件格式效验

后台代码

1.1Controller

工具类:POIUtils工具类

并将health_web工程创建OrderSettingController并提供upload方法

package com.itheima.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.itheima.constant.MessageConstant;
import com.itheima.entity.Result;
import com.itheima.pojo.OrderSetting;
import com.itheima.service.OrderSettingService;
import com.itheima.utils.POIUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/***
 * 预约设置
 */
@RestController
@RequestMapping("/ordersetting")
public class OrderSettingController {
    @Reference
    private OrderSettingService orderSettingService;
    @RequestMapping("/upload")
    public Result upload(@RequestParam("excelFile")MultipartFile excelFile){
        try {
            //读取Excel文件数据
            final List<String[]> list = POIUtils.readExcel(excelFile);
            //进行判断
            if(list !=null&& list.size()>0){
                List<OrderSetting> orderSettingList=new ArrayList<>();
                for (String[] strings : list) {
                    final OrderSetting orderSetting = new OrderSetting(new Date(strings[0]),Integer.parseInt(strings[1]));
                    orderSettingList.add(orderSetting);
                }
                orderSettingService.add(orderSettingList);
            }
        } catch (IOException e) {
            //批量导入失败
           return new Result(false, MessageConstant.IMPORT_ORDERSETTING_FAIL);
        }
        //批量导入成功
        return new Result(true,MessageConstant.IMPORT_ORDERSETTING_SUCCESS);
    }
}

1.2服务接口

创建OrderSettingService服务接口并提供新增方法

package com.itheima.service;

import com.itheima.pojo.OrderSetting;

import java.util.List;

/***
 * 服务接口层
 */
public interface OrderSettingService {
    /***
     * 批量导入
     * @param orderSettingList
     */
    void add(List<OrderSetting> orderSettingList);
}

1.3服务实现类

创建服务实现类OrderSettingServiceImpl并实现新增方法

package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.OrderSettingDao;
import com.itheima.pojo.OrderSetting;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

/***
 * 预约设置服务
 */
@Service(interfaceClass = OrderSettingService.class)
public class OrderSettingServiceImpl implements OrderSettingService {
    @Autowired
    private OrderSettingDao orderSettingDao;
    /***
     * 批量添加
     * @param orderSettingList
     */
    @Override
    public void add(List<OrderSetting> orderSettingList) {
       if(orderSettingList!=null&&orderSettingList.size()>0){
           for (OrderSetting orderSetting : orderSettingList) {
               //检查此数据日期是否存在
               long count=orderSettingDao.findCountByorderData(orderSetting.getOrderDate());
               if(count>0){
                   //已经存在,执行更新操作
                   orderSettingDao.editNumberByOrderDate(orderSetting);
               }else {
                   //不存在,执行添加操作
                   orderSettingDao.add(orderSetting);
               }
           }
       }
    }
}

1.4Dao接口

创建服务实现类OrderSettingServiceImpl并实现新增方法

package com.itheima.dao;

import com.itheima.pojo.OrderSetting;

import java.util.Date;

/***
 * 持久层接口
 * 映射器
 */
public interface OrderSettingDao {
    /***
     *预约日期查询
     * @param orderDate
     * @return
     */
    long findCountByorderData(Date orderDate);

    /***
     *更新预约人数
     * @param orderSetting
     */
    void editNumberByOrderDate(OrderSetting orderSetting);

    /***
     *添加人数
     * @param orderSetting
     */
    void add(OrderSetting orderSetting);

}

1.5Mapper映射文件

创建Mapper映射文件OrderSettingDao.xml并提供相关SQL

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.itheima.dao.OrderSettingDao" >
    <!--新增-->
    <insert id="add" parameterType="com.itheima.pojo.OrderSetting">
        insert into t_ordersetting
        (orderDate,number,reservations)
        values
        (#{orderDate},#{number},#{reservations})
    </insert>
    <!--根据日期更新预约人数-->
    <update id="editNumberByOrderDate" parameterType="com.itheima.pojo.OrderSetting">
        update t_ordersetting set number = #{number} where orderDate = #{orderDate}
    </update>
    <!--根据预约日期查询-->
    <select id="findCountByOrderDate" parameterType="java.util.Date" resultType="long">
        select count(*) from t_ordersetting where orderDate = #{orderDate}
    </select>
</mapper>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值