package com.zbooksoft.gdmis.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruili.wcp.data.entity.config.ImportColumn; import com.ruili.wcp.data.entity.config.ImportTemplate; import com.ruili.wcp.engine.form.IFormData; import com.ruili.wcp.service.config.ImportColumnService; import com.ruili.wcp.service.config.ImportTemplateService; import com.ruili.wcp.web.common.LicenseException; import com.ruili.wcp.web.model.AjaxResponse; import com.ruili.wcp.web.model.ErrorInfo; import com.zbooksoft.gdmis.data.entity.CatAjjxx; import com.zbooksoft.gdmis.service.CatAjjxxService; import com.zbooksoft.gdmis.service.CatSwajxxService; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.authz.annotation.RequiresUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Controller; 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.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.ruili.wcp.web.controller.general.DataImportController.getExcelValue; /** * @Description:导入Excel文件 * @Author: zhai * @Date: 2024/9/11 **/ @Controller @RequestMapping("/tape") public class TapeController { @Autowired ImportTemplateService importTemplateService; @Autowired ImportColumnService importColumnService; @Autowired CatSwajxxService catSwajxxService; @Autowired CatAjjxxService catAjjxxService; // @Autowired // CatSwzkxxService catSwzkxxService; // @Autowired // CatSwyxxxService catSwyxxxService; @Autowired IFormData iform; @Autowired JdbcTemplate jdbcTemplate; private static final Logger logger = LoggerFactory.getLogger(TapeController.class); /** * 导入页面 * * @param type 0:从转孔基本信息进入 1:从钻孔图幅进入 * @return */ @RequestMapping({"/importIndex"}) @RequiresUser public ModelAndView importIndex(Integer type) { ModelAndView mv = new ModelAndView("gh/excel/tapeImportExcel"); return mv; } /** * @param file 0 导入转孔信息 1 导入图幅信息 2 导入实物案卷信息 * @return * @throws LicenseException */ @RequestMapping({"/importExcel"}) @ResponseBody @RequiresUser public Object importExcel(@RequestParam(value = "file", required = false) MultipartFile file, String ajId) throws LicenseException { try { readExcelByTape(file, ajId); return new AjaxResponse(true); } catch (Exception e) { logger.error(e.getMessage(), e); return new AjaxResponse(new ErrorInfo("导入失败"), false); } } /** * @Description 全宗统计数据 * @Date${DATE} 2023/5/16 **/ @RequestMapping(value = "/getProject") @ResponseBody @RequiresUser public List> getProject() { String sql = "SELECT XMKYQMC, ID FROM CAT_FILE_AJJXX"; List> mapList = jdbcTemplate.queryForList(sql); return mapList; } /** * 处理选择的数据(装盒) * * @param fromId * @param idList * @return */ @RequestMapping(value = "/addTapeDetail") @ResponseBody public Object addBoxList(Long fromId, @RequestBody List idList) { for (Long longId : idList) { String countSql = "SELECT COUNT(1) AS count FROM BUS_TAPE_DETAIL WHERE RELATION_ID = " + longId + " AND FORM_ID = " + fromId; int count = jdbcTemplate.queryForObject(countSql, Integer.class); if (count > 0) { continue; } String selectSql = "SELECT * FROM BUS_TAPE_MANAGE WHERE ID = " + longId; Map tapeManageMap = jdbcTemplate.queryForMap(selectSql); HashMap insertMap = new HashMap<>(); insertMap.put("GQM", tapeManageMap.get("GQM")); insertMap.put("LBDZ", tapeManageMap.get("LBDZ")); insertMap.put("WJM", tapeManageMap.get("WJM")); insertMap.put("PH", tapeManageMap.get("PH")); insertMap.put("WJH", tapeManageMap.get("WJH")); insertMap.put("GZDW", tapeManageMap.get("GZDW")); insertMap.put("GZRQ", tapeManageMap.get("GZRQ")); insertMap.put("FORM_ID", fromId); insertMap.put("RELATION_ID", longId); iform.insert(1982633467650830338L, insertMap); } return new AjaxResponse(true); } private void readExcelByTape(MultipartFile file, String ajId) throws IOException { String originalFilename = file.getOriginalFilename(); CatAjjxx catAjjxx = catAjjxxService.getById(ajId); HashMap map = new HashMap<>(); map.put("AJ_ID", ajId); map.put("XMMC", catAjjxx.getXmkyqmc()); map.put("XMBH", catAjjxx.getXmkyqbh()); map.put("ZLZT", 0); //获取最大批次号 String sql = "SELECT MAX(PCH) as pch FROM BUS_TAPE_MANAGE WHERE AJ_ID =" + ajId; Map mapPch = jdbcTemplate.queryForMap(sql); Integer pch = mapPch.get("pch") == null ? 0 : Integer.parseInt(mapPch.get("pch").toString()); map.put("PCH", pch + 1); InputStream inputStream = file.getInputStream(); if (originalFilename.matches("^.+\\.(?i)(xls)$")) { //创建工作簿对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream); readExcel2003(hssfWorkbook); } if (originalFilename.matches("^.+\\.(?i)(xlsx)$")) { //创建工作簿对象 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream); readExcel2007(xssfWorkbook, map); } } private String getValue(HSSFSheet sheet, int rowIndex, int cellIndex) { Row row = sheet.getRow(rowIndex); if (row != null) { Cell cell = row.getCell(cellIndex); if (cell != null) { String excelValue = getExcelValue(cell) == null ? "" : getExcelValue(cell).toString(); return subString(excelValue); } } return null; } private String subString(String cellValue) { if (cellValue != null && cellValue.contains(":")) { int index = cellValue.indexOf(":"); return cellValue.substring(index + 1).trim(); } return cellValue; } //Excel2003 xls格式 private void readExcel2003(HSSFWorkbook hssfWorkbook) { ImportTemplate importTemplate = importTemplateService.getByIdImportTemplate(1966024810830041089L); QueryWrapper query = new QueryWrapper(); query.eq("import_template_id", importTemplate.getImportTemplateId()); List columnList = importColumnService.list(query); List excelColumns = new ArrayList(); //读取第i个工作表 HSSFSheet sheet = hssfWorkbook.getSheetAt(1); //获取最后一行的num,即总行数。此处从6行开始 int maxRow = sheet.getLastRowNum(); Row row = sheet.getRow(3); // Row row = sheet.getRow(4); int totalCells = row.getPhysicalNumberOfCells(); for (int j = 0; j < totalCells; ++j) { Cell cell = row.getCell(j); String cellValue = getExcelValue(cell) == null ? "" : getExcelValue(cell).toString(); if (StringUtils.isNotEmpty(cellValue) && "站位位置".equals(cellValue)) { Row rowJd = sheet.getRow(4); Cell cellJd = rowJd.getCell(j); String excelValueJd = getExcelValue(cellJd); excelColumns.add(excelValueJd); Cell cellWd = rowJd.getCell(j + 1); String excelValueWd = getExcelValue(cellWd); excelColumns.add(excelValueWd); } else if (StringUtils.isNotEmpty(cellValue)) { excelColumns.add(cellValue.toString()); } } for (int j = 6; j <= maxRow; j++) { Row rowValue = sheet.getRow(j); Map map = new HashMap(); for (int z = 0; z < columnList.size(); z++) { ImportColumn column = columnList.get(z); int columnIndex = excelColumns.indexOf(column.getExcelColunm()); if (columnIndex >= 0) { Cell cell = rowValue.getCell(columnIndex); Object cellValue = getExcelValue(cell); map.put(column.getColumnName(), cellValue); } } iform.insert(importTemplate.getTableId(), map); } } // Excel2007 xlsx private void readExcel2007(XSSFWorkbook xssfWorkbook, Map mapData) { ImportTemplate importTemplate = importTemplateService.getByIdImportTemplate(1966024810830041089L); QueryWrapper query = new QueryWrapper(); query.eq("import_template_id", importTemplate.getImportTemplateId()); List columnList = importColumnService.list(query); List excelColumns = new ArrayList(); //读取第i个工作表 XSSFSheet sheet = xssfWorkbook.getSheetAt(0); //获取最后一行的num,即总行数。此处从0开始 int maxRow = sheet.getLastRowNum(); Row row = sheet.getRow(0); int totalCells = row.getPhysicalNumberOfCells(); for (int j = 0; j < totalCells; ++j) { Cell cell = row.getCell(j); Object cellValue = getExcelValue(cell); excelColumns.add(cellValue.toString()); } for (int j = 1; j <= maxRow; j++) { try { Row rowValue = sheet.getRow(j); Map map = new HashMap(); map.putAll(mapData); for (int z = 0; z < columnList.size(); z++) { ImportColumn column = columnList.get(z); int columnIndex = excelColumns.indexOf(column.getExcelColunm()); if (columnIndex >= 0) { Cell cell = rowValue.getCell(columnIndex); Object cellValue = getExcelValue(cell); map.put(column.getColumnName(), cellValue); } } iform.insert(importTemplate.getTableId(), map); } catch (Exception e) { logger.info(e.getMessage(), e); } } } }