批量导入预约设置信息
预约设置信息对应的数据表为t_ordersetting,预约设置操作对应的页面为ordersetting.html
t_ordersetting表结构:
orderDate:预约日期
number:可预约人数
reservations:已预约人数
批量导入预约设置信息操作过程:
1、点击模板下载按钮下载Excel模板文件
2、将预约设置信息录入到模板文件中
3、点击上传文件按钮将录入完信息的模板文件上传到服务器
4、通过POI读取上传文件的数据并保存到数据库
完善页面
提供模板文件
资料中已经提供了Excel模板文件ordersetting_template.xlsx,将文件放在health_backend工程的template目录
实现模板文件下载
为模板下载按钮绑定事件实现模板文件下载
<el-button style="margin-bottom: 20px;margin-right: 20px" type="primary"
@click="downloadTemplate()">模板下载</el-button>
//模板文件下载 downloadTemplate(){ window.location.href="../../template/ordersetting_template.xlsx"; }
文件上传
使用ElementUI的上传组件实现文件上传并绑定相关事件
<el-upload action="/ordersetting/upload.do" name="excelFile" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeUpload"> <el-button type="primary">上传文件</el-button> </el-upload>
handleSuccess(response, file) { if(response.flag){ this.$message({ message: response.message, type: 'success' }); }else{ this.$message.error(response.message); } } beforeUpload(file){ const isXLS = file.type === 'application/vnd.ms-excel'; if(isXLS){ return true; } const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; if (isXLSX) { return true; } this.$message.error('上传文件只能是xls或者xlsx格式!'); return false; }
后台代码
Controller
将资料中的POIUtils工具类复制到health_common工程
在health_backend工程创建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.RequestBody; 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; import java.util.Map; /** * 预约设置 */ @RestController @RequestMapping("/ordersetting") public class OrderSettingController { @Reference private OrderSettingService orderSettingService; /** * Excel文件上传,并解析文件内容保存到数据库 * @param excelFile * @return */ @RequestMapping("/upload") public Result upload(@RequestParam("excelFile")MultipartFile excelFile){ try { //读取Excel文件数据 List<String[]> list = POIUtils.readExcel(excelFile); if(list != null && list.size() > 0){ List<OrderSetting> orderSettingList = new ArrayList<>(); for (String[] strings : list) { OrderSetting orderSetting = new OrderSetting(new Date(strings[0]), Integer.parseInt(strings[1])); orderSettingList.add(orderSetting); } orderSettingService.add(orderSettingList); } } catch (IOException e) { e.printStackTrace(); return new Result(false, MessageConstant.IMPORT_ORDERSETTING_FAIL); } return new Result(true,MessageConstant.IMPORT_ORDERSETTING_SUCCESS); } }
服务接口
创建OrderSettingService服务接口并提供新增方法
package com.itheima.service; import com.itheima.pojo.OrderSetting; import java.util.List; import java.util.Map; public interface OrderSettingService { public void add(List<OrderSetting> list); }
服务实现类
创建服务实现类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 org.springframework.transaction.annotation.Transactional; import java.util.*; /** * 预约设置服务 */ @Service(interfaceClass = OrderSettingService.class) @Transactional public class OrderSettingServiceImpl implements OrderSettingService { @Autowired private OrderSettingDao orderSettingDao; //批量添加 public void add(List<OrderSetting> list) { if(list != null && list.size() > 0){ for (OrderSetting orderSetting : list) { //检查此数据(日期)是否存在 long count = orderSettingDao.findCountByOrderDate(orderSetting.getOrderDate()); if(count > 0){ //已经存在,执行更新操作 orderSettingDao.editNumberByOrderDate(orderSetting); }else{ //不存在,执行添加操作 orderSettingDao.add(orderSetting); } } } } }
Dao接口
创建Dao接口OrderSettingDao并提供更新和新增方法
package com.itheima.dao; import com.itheima.pojo.OrderSetting; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public interface OrderSettingDao { public void add(OrderSetting orderSetting); public void editNumberByOrderDate(OrderSetting orderSetting); public long findCountByOrderDate(Date orderDate); }
Mapper映射文件
创建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>