1 需求分析
前面我们已经完成了检查项管理、检查组管理、套餐管理等。接下来我们需要进行预约 设置,其实就是设置每一天的体检预约最大数量。客户可以通过微信端在线预约,在线 预约时需要选择体检的时间,如果客户选择的时间已经预约满则无法进行预约。
1.1 POI介绍
Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文 件。
jxl:专门操作Excel
maven坐标:
POI结构:
2 从Excel文件读取数据
使用POI可以从一个已经存在的Excel文件中读取数据。
//使用POI读取Excel文件中的数据
@Test
public void test1() throws Exception{
//加载指定文件,创建一个Excel对象(工作簿)
XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("C:\\io\\score.xlsx")));
//读取Excel文件中第一个Sheet标签页
XSSFSheet sheet = excel.getSheetAt(0);
//遍历Sheet标签页,获得每一行数据
for (Row row : sheet) {
//遍历行,获得每个单元格对象
for (Cell cell : row) {
System.out.println(cell.getStringCellValue());
}
}
//关闭资源
excel.close();
}
通过上面的入门案例可以看到,POI操作Excel表格封装了几个核心对象:
上面案例是通过遍历工作表获得行,遍历行获得单元格,最终获取单元格中的值。
还有一种方式就是获取工作表最后一个行号,从而根据行号获得行对象,通过行获取最 后一个单元格索引,从而根据单元格索引获取每行的一个单元格对象,代码如下:
//使用POI读取Excel文件中的数据
@Test
public void test2() throws Exception{
//加载指定文件,创建一个Excel对象(工作簿)
XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("c:\\io\\score.xlsx")));
//读取Excel文件中第一个Sheet标签页
XSSFSheet sheet = excel.getSheetAt(0);
//获得当前工作表中最后一个行号,需要注意:行号从0开始
int lastRowNum = sheet.getLastRowNum();
System.out.println("lastRowNum = " + lastRowNum);
for(int i=0;i<=lastRowNum;i++){
XSSFRow row = sheet.getRow(i);//根据行号获取每一行
//获得当前行最后一个单元格索引
short lastCellNum = row.getLastCellNum();
System.out.println("lastCellNum = " + lastCellNum);
for(int j=0;j<lastCellNum;j++){
XSSFCell cell = row.getCell(j);//根据单元格索引获得单元格对象
System.out.println(cell.getStringCellValue());
}
}
//关闭资源
excel.close();
}
3 向Excel文件写入数据
使用POI可以在内存中创建一个Excel文件并将数据写入到这个文件,最后通过输出流将 内存中的Excel文件下载到磁盘。
//使用POI向Excel文件写入数据,并且通过输出流将创建的Excel文件保存到本地磁盘
@Test
public void test3() throws Exception{
//在内存中创建一个Excel文件(工作簿)
XSSFWorkbook excel = new XSSFWorkbook();
//创建一个工作表对象
XSSFSheet sheet = excel.createSheet("oracle");
//在工作表中创建行对象
XSSFRow title = sheet.createRow(0);
//在行中创建单元格对象
title.createCell(0).setCellValue("姓名");
title.createCell(1).setCellValue("地址");
title.createCell(2).setCellValue("年龄");
XSSFRow dataRow = sheet.createRow(1);
dataRow.createCell(0).setCellValue("小明");
dataRow.createCell(1).setCellValue("北京");
dataRow.createCell(2).setCellValue("20");
//创建一个输出流,通过输出流将内存中的Excel文件写到磁盘
FileOutputStream out = new FileOutputStream(new File("c:\\io\\hello.xlsx"));
excel.write(out);
out.flush();
excel.close();
}
4 批量导入预约设置信息
controller
将资料中的POIUtils工具类复制到health_common工程
在health_backend工程创建OrderSettingController并提供upload方法
/**
* 预约设置
*/
@RestController
@RequestMapping("/ordersetting")
public class OrderSettingController {
@Reference
private OrderSettingService orderSettingService;
//文件上传,实现预约设置数据批量导入
@RequestMapping("/upload")
public Result upload(@RequestParam("excelFile") MultipartFile excelFile){
try {
List<String[]> list = POIUtils.readExcel(excelFile);//使用POI解析表格数据
List<OrderSetting> data = new ArrayList<>();
for (String[] strings : list) {
String orderDate = strings[0];
String number = strings[1];
OrderSetting orderSetting = new OrderSetting(new
Date(orderDate),Integer.parseInt(number));
data.add(orderSetting);
}
//通过dubbo远程调用服务实现数据批量导入到数据库
orderSettingService.add(data);
return new Result(true, MessageConstant.IMPORT_ORDERSETTING_SUCCESS);
} catch (IOException e) {
e.printStackTrace();
//文件解析失败
return new Result(false, MessageConstant.IMPORT_ORDERSETTING_FAIL);
}
}
}
服务实现类
创建服务实现类OrderSettingServiceImpl并实现新增方法。
/**
* 预约设置服务
*/
@Service(interfaceClass = OrderSettingService.class)
@Transactional
public class OrderSettingServiceImpl implements OrderSettingService{
@Autowired
private OrderSettingDao orderSettingDao;
//批量导入预约设置数据
@Override
public void add(List<OrderSetting> list) {
if(list != null && list.size() > 0){
for (OrderSetting orderSetting : list) {
//判断当前日期是否已经进行了预约设置
long countByOrderDate =
orderSettingDao.findCountByOrderDate(orderSetting.getOrderDate());
if(countByOrderDate > 0){
//已经进行了预约设置,执行更新操作
orderSettingDao.editNumberByOrderDate(orderSetting);
}else{
//没有进行预约设置,执行插入操作
orderSettingDao.add(orderSetting);
}
}
}
}
}
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.qf.dao.OrderSettingDao">
<insert id="add" parameterType="com.qf.pojo.OrderSetting">
insert into t_ordersetting
(orderDate,number,reservations)
values
(#{orderDate},#{number},#{reservations})
</insert>
<update id="editNumberByOrderDate" parameterType="com.qf.pojo.OrderSetting">
update t_ordersetting
set number = #{number}
where orderDate = #{orderDate}
</update>
<select id="findCountByOrderDate" parameterType="date" resultType="long">
select count(id) from t_ordersetting where orderDate = #{orderDate}
</select>
</mapper>
5 启动测试
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/75515.html