package com.javaweb.platform.service.impl; import java.io.InputStream; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.formula.eval.ErrorEval; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.DateUtil; import org.apache.poi.ss.usermodel.FormulaEvaluator; 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.ss.usermodel.WorkbookFactory; import com.javaweb.common.utils.DateUtils; import com.javaweb.common.utils.IdGenerate; import com.javaweb.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import com.javaweb.platform.mapper.ProjectInfoMapper; import com.javaweb.platform.domain.ProjectInfo; import com.javaweb.platform.service.IProjectInfoService; import com.javaweb.common.core.text.Convert; /** * 项目信息Service业务层处理 * * @author zmk * @date 2022-03-08 */ @Service public class ProjectInfoServiceImpl implements IProjectInfoService { @Autowired private ProjectInfoMapper projectInfoMapper; /** * 查询项目信息 * * @param id 项目信息ID * @return 项目信息 */ @Override public ProjectInfo selectProjectInfoById(String id) { return projectInfoMapper.selectProjectInfoById(id); } /** * 查询项目信息列表 * * @param projectInfo 项目信息 * @return 项目信息 */ @Override public List selectProjectInfoList(ProjectInfo projectInfo) { return projectInfoMapper.selectProjectInfoList(projectInfo); } /** * 新增项目信息 * * @param projectInfo 项目信息 * @return 结果 */ @Override public int insertProjectInfo(ProjectInfo projectInfo) { projectInfo.setCreateTime(DateUtils.getNowDate()); return projectInfoMapper.insertProjectInfo(projectInfo); } /** * 修改项目信息 * * @param projectInfo 项目信息 * @return 结果 */ @Override public int updateProjectInfo(ProjectInfo projectInfo) { projectInfo.setUpdateTime(DateUtils.getNowDate()); return projectInfoMapper.updateProjectInfo(projectInfo); } /** * 删除项目信息对象 * * @param ids 需要删除的数据ID * @return 结果 */ @Override public int deleteProjectInfoByIds(String ids) { return projectInfoMapper.deleteProjectInfoByIds(Convert.toStrArray(ids)); } /** * 删除项目信息信息 * * @param id 项目信息ID * @return 结果 */ @Override public int deleteProjectInfoById(String id) { return projectInfoMapper.deleteProjectInfoById(id); } @Override public List selectByPolygon(String polygon) { return projectInfoMapper.selectByPolygon(polygon); } @Override public List selectBynCircle(Double lat, Double lng, Double radius) { return projectInfoMapper.selectBynCircle(lat, lng, radius); } @Override public String importData(MultipartFile file, boolean updateSupport) { String string = ""; List docInfos = new ArrayList<>(); try { InputStream inputStream = file.getInputStream(); Workbook wb = WorkbookFactory.create(inputStream); Sheet sheet = wb.getSheetAt(0);// 打开第1个工作薄 docInfos = getProjectInfo(sheet); } catch (Exception e) { string = "读取信息错误:" + e.toString(); return string; } string = insertTemplateData(docInfos); return string; } private String insertTemplateData(List infos){ try { for (ProjectInfo info : infos) { insertProjectInfo(info); } } catch (Exception e) { return e.toString(); } return "导入完毕"; } //获取表格数据 private List getProjectInfo(Sheet sheet){ int lastRowNo = sheet.getLastRowNum() + 1;// 假如有10行数据 List list = new ArrayList<>(); try { for (int i = 1; i < lastRowNo; i++) { ProjectInfo info = new ProjectInfo(); Row row = sheet.getRow(i); String address = String.valueOf(getCellValue(row, 11)); if(StringUtils.isEmpty(address)){ break; } String projectname = String.valueOf(getCellValue(row, 1)); info.setProjectName(projectname); String ConstructionUnit = String.valueOf(getCellValue(row, 2)); info.setConstructionUnit(ConstructionUnit); String ServiceUnit = String.valueOf(getCellValue(row, 3)); info.setServiceUnit(ServiceUnit); String ProjectLeader = String.valueOf(getCellValue(row, 6)); info.setProjectLeader(ProjectLeader); info.setAddress(address); info.setId(IdGenerate.nextId()); list.add(info); } } catch (Exception e) { e.printStackTrace(); throw e; } return list; } private Date DateTimeFormat(String str){ if(StringUtils.isEmpty(str)){ return null; } return DateUtils.parseDate(str.trim()); } /** * 获取单元格数据 * * @param row * @param column * @return */ @SuppressWarnings("deprecation") private Object getCellValue(Row row, int column) { if (row == null) { return row; } Object val = ""; try { Cell cell = row.getCell(column); if (cell != null) { if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) { val = cell.getNumericCellValue(); if (HSSFDateUtil.isCellDateFormatted(cell)) { val = DateUtil.getJavaDate((Double) val); // POI Excel // 日期格式转换 } else { if ((Double) val % 1 > 0) { val = new DecimalFormat("0.000000").format(val); } else { val = new DecimalFormat("0").format(val); } } } else if (cell.getCellType() == Cell.CELL_TYPE_STRING) { val = cell.getStringCellValue(); } else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) { try { val = cell.getStringCellValue(); } catch (Exception e) { FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper() .createFormulaEvaluator(); evaluator.evaluateFormulaCell(cell); CellValue cellValue = evaluator.evaluate(cell); switch (cellValue.getCellType()) { case Cell.CELL_TYPE_NUMERIC: val = cellValue.getNumberValue(); break; case Cell.CELL_TYPE_STRING: val = cellValue.getStringValue(); break; case Cell.CELL_TYPE_BOOLEAN: val = cellValue.getBooleanValue(); break; case Cell.CELL_TYPE_ERROR: val = ErrorEval.getText(cellValue.getErrorValue()); break; default: val = cell.getCellFormula(); } } } else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { val = cell.getBooleanCellValue(); } else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) { val = cell.getErrorCellValue(); } } } catch (Exception e) { e.printStackTrace(); return val; } return val; } @Override public List selectByPolygonContains(String polygon) { return projectInfoMapper.selectByPolygonContains(polygon); } }