HouseDataImportService.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package com.example.service.house;
  2. import com.example.pojo.vo.GetHouseDataImportTemplatesVo;
  3. import com.example.pojo.dto.HouseDataImportDto;
  4. import com.example.enums.HouseDataImportEnum;
  5. import com.example.utils.R;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.apache.commons.io.FileUtils;
  8. import org.apache.poi.ss.usermodel.Row;
  9. import org.apache.poi.ss.usermodel.Sheet;
  10. import org.apache.poi.ss.usermodel.Workbook;
  11. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.web.multipart.MultipartFile;
  14. import java.io.File;
  15. import java.io.InputStream;
  16. import java.nio.file.Files;
  17. import java.nio.file.Paths;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. @Slf4j
  21. @Service
  22. public class HouseDataImportService {
  23. public R getTemplates() {
  24. List<GetHouseDataImportTemplatesVo> vos = new ArrayList<>();
  25. GetHouseDataImportTemplatesVo wxys = new GetHouseDataImportTemplatesVo();
  26. wxys.setId(HouseDataImportEnum.WEI_XIU_YU_SUAN.name());
  27. wxys.setName("维修费用预算(第二年预算)");
  28. wxys.setUrl("house-car" + "/" + "oss/public/template/house/wxys.xlsx");
  29. vos.add(wxys);
  30. GetHouseDataImportTemplatesVo czys = new GetHouseDataImportTemplatesVo();
  31. czys.setId(HouseDataImportEnum.CHU_ZHU_YU_SUAN.name());
  32. czys.setName("对外出租费用预算(第二年预算)");
  33. czys.setUrl("house-car" + "/" + "oss/public/template/house/czys.xlsx");
  34. vos.add(czys);
  35. return R.ok().put("data", vos);
  36. }
  37. public R dataImport(HouseDataImportDto dto, MultipartFile file) {
  38. if (HouseDataImportEnum.WEI_XIU_YU_SUAN.equals(dto.getId())) {
  39. return wxysImport(dto, file);
  40. }
  41. if (HouseDataImportEnum.CHU_ZHU_YU_SUAN.equals(dto.getId())) {
  42. return czysImport(dto, file);
  43. }
  44. return R.ok();
  45. }
  46. public synchronized R wxysImport(HouseDataImportDto dto, MultipartFile file) {
  47. try {
  48. // String dir = "data/data-import/house/wei_xiu_yu_suan/";
  49. String dir = "/data/data-import/house/wei_xiu_yu_suan/";
  50. Files.createDirectories(Paths.get(dir));
  51. File fileNew = new File(dir + dto.getYear() + ".xlsx");
  52. FileUtils.copyInputStreamToFile(file.getInputStream(), fileNew);
  53. try(InputStream inputStream = Files.newInputStream(fileNew.toPath());
  54. Workbook workbook = new XSSFWorkbook(inputStream)
  55. ) {
  56. // 读取第一个工作表
  57. Sheet sheet = workbook.getSheetAt(0);
  58. // 表头行
  59. Row headerRow = sheet.getRow(0);
  60. // 列数
  61. int columnCount = headerRow.getPhysicalNumberOfCells();
  62. if (5 != columnCount) {
  63. return R.error("列数和模板不一致");
  64. }
  65. }
  66. } catch (Exception e) {
  67. log.error(e.getMessage(), e);
  68. return R.error("导入失败");
  69. }
  70. return R.ok();
  71. }
  72. public synchronized R czysImport(HouseDataImportDto dto, MultipartFile file) {
  73. try {
  74. // String dir = "data/data-import/house/chu_zu_yu_suan/";
  75. String dir = "/data/data-import/house/chu_zu_yu_suan/";
  76. Files.createDirectories(Paths.get(dir));
  77. File fileNew = new File(dir + dto.getYear() + ".xlsx");
  78. FileUtils.copyInputStreamToFile(file.getInputStream(), fileNew);
  79. try(InputStream inputStream = Files.newInputStream(fileNew.toPath());
  80. Workbook workbook = new XSSFWorkbook(inputStream)
  81. ) {
  82. // 读取第一个工作表
  83. Sheet sheet = workbook.getSheetAt(0);
  84. // 表头行
  85. Row headerRow = sheet.getRow(0);
  86. // 列数
  87. int columnCount = headerRow.getPhysicalNumberOfCells();
  88. if (5 != columnCount) {
  89. return R.error("列数和模板不一致");
  90. }
  91. }
  92. } catch (Exception e) {
  93. log.error(e.getMessage(), e);
  94. return R.error("导入失败");
  95. }
  96. return R.ok();
  97. }
  98. }