package com.example.service.house; import com.example.pojo.vo.GetHouseDataImportTemplatesVo; import com.example.pojo.dto.HouseDataImportDto; import com.example.enums.HouseDataImportEnum; import com.example.utils.R; import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FileUtils; 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.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; @Slf4j @Service public class HouseDataImportService { public R getTemplates() { List vos = new ArrayList<>(); GetHouseDataImportTemplatesVo wxys = new GetHouseDataImportTemplatesVo(); wxys.setId(HouseDataImportEnum.WEI_XIU_YU_SUAN.name()); wxys.setName("维修费用预算(第二年预算)"); wxys.setUrl("house-car" + "/" + "oss/public/template/house/wxys.xlsx"); vos.add(wxys); GetHouseDataImportTemplatesVo czys = new GetHouseDataImportTemplatesVo(); czys.setId(HouseDataImportEnum.CHU_ZHU_YU_SUAN.name()); czys.setName("对外出租费用预算(第二年预算)"); czys.setUrl("house-car" + "/" + "oss/public/template/house/czys.xlsx"); vos.add(czys); return R.ok().put("data", vos); } public R dataImport(HouseDataImportDto dto, MultipartFile file) { if (HouseDataImportEnum.WEI_XIU_YU_SUAN.equals(dto.getId())) { return wxysImport(dto, file); } if (HouseDataImportEnum.CHU_ZHU_YU_SUAN.equals(dto.getId())) { return czysImport(dto, file); } return R.ok(); } public synchronized R wxysImport(HouseDataImportDto dto, MultipartFile file) { try { // String dir = "data/data-import/house/wei_xiu_yu_suan/"; String dir = "/data/data-import/house/wei_xiu_yu_suan/"; Files.createDirectories(Paths.get(dir)); File fileNew = new File(dir + dto.getYear() + ".xlsx"); FileUtils.copyInputStreamToFile(file.getInputStream(), fileNew); try(InputStream inputStream = Files.newInputStream(fileNew.toPath()); Workbook workbook = new XSSFWorkbook(inputStream) ) { // 读取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 表头行 Row headerRow = sheet.getRow(0); // 列数 int columnCount = headerRow.getPhysicalNumberOfCells(); if (5 != columnCount) { return R.error("列数和模板不一致"); } } } catch (Exception e) { log.error(e.getMessage(), e); return R.error("导入失败"); } return R.ok(); } public synchronized R czysImport(HouseDataImportDto dto, MultipartFile file) { try { // String dir = "data/data-import/house/chu_zu_yu_suan/"; String dir = "/data/data-import/house/chu_zu_yu_suan/"; Files.createDirectories(Paths.get(dir)); File fileNew = new File(dir + dto.getYear() + ".xlsx"); FileUtils.copyInputStreamToFile(file.getInputStream(), fileNew); try(InputStream inputStream = Files.newInputStream(fileNew.toPath()); Workbook workbook = new XSSFWorkbook(inputStream) ) { // 读取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 表头行 Row headerRow = sheet.getRow(0); // 列数 int columnCount = headerRow.getPhysicalNumberOfCells(); if (5 != columnCount) { return R.error("列数和模板不一致"); } } } catch (Exception e) { log.error(e.getMessage(), e); return R.error("导入失败"); } return R.ok(); } }