diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java index 63b71c2c..09f0738c 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/constant/FieldCommon.java @@ -86,4 +86,7 @@ public class FieldCommon { // 中文双引号 public static final String QUOTE = "“"; + // Ids + public static final String IDS = "ids"; + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java index 6e5800c1..3a3505ce 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java @@ -5,6 +5,7 @@ import com.jero.modules.laws.common.vo.ManyStandardSelectionBox; import com.jero.modules.laws.common.vo.ManyStandardSelectionBoxVO; import com.jero.modules.tag.entity.LawsTag; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -22,11 +23,15 @@ public interface ILawsCommonService { **/ IPage> getCommonPage(Map parameterMap); - /** - * @Author: liao - * @Date: 2023/8/24 9:09 - * @Description: 获取通用表头 - **/ + IPage> getExportData(Map parameterMap, List headers); + + List getExportHeader(Map parameterMap); + + /** + * @Author: liao + * @Date: 2023/8/24 9:09 + * @Description: 获取通用表头 + **/ List getCommonHeader(String module); /** @@ -98,4 +103,14 @@ public interface ILawsCommonService { * @Description: 根据标准编号查询简单标准 **/ ManyStandardSelectionBox getSingleStandard(String standardNumber); + + /** + * 三标通用导出 + */ + void commonExport(HttpServletResponse response, Map parameterMap, String sheetName, String fileName); + + /** + * 三表通用带文件导出 + */ + void exportDataWithFile(HttpServletResponse response, Map parameterMap, String sheetName, String fileName); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index 34e8ad6e..db631325 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -1,5 +1,6 @@ package com.jero.modules.laws.common.service.impl; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -33,13 +34,20 @@ import com.jero.modules.tag.entity.LawsTag; import com.jero.modules.tag.enums.TableNameEnum; import com.jero.modules.tag.enums.LawsFieldTypeEnum; import com.jero.modules.tag.service.ILawsAreaService; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +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.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; @@ -50,6 +58,7 @@ import java.util.stream.Collectors; * @Date: 2023/8/23 16:54 * @Description: 通用 */ +@Slf4j @Component public class LawsCommonServiceImpl implements ILawsCommonService { @@ -114,6 +123,72 @@ public class LawsCommonServiceImpl implements ILawsCommonService { return infoPage; } + @Override + public IPage> getExportData(Map parameterMap, List fieldList) { + // 获取操作模块 + String module = (String) parameterMap.get(FieldCommon.MODULE); + + // 获取要操作的表名 + String tableName = TableNameEnum.getTableName(module); + + // 封装查询显示的字段 + String selectField = getSelectField(fieldList); + + // 筛选出查询列表显示的字段(不传id查列表) + List fieldListSelect = fieldList.stream().filter(lawsTag -> YesOrNoEnum.YES.getValue() + .equals(lawsTag.getIsShowList().toString())).collect(Collectors.toList()); + // 筛选出用于查询的字段 + List fieldListCondition = fieldList.stream().filter(lawsTag -> YesOrNoEnum.YES.getValue() + .equals(lawsTag.getIsQuery().toString())).collect(Collectors.toList()); + + int pageNo = 1; + int pageSize = Integer.MAX_VALUE; + IPage> page = new Page<>(pageNo, pageSize); + + // 封装查询条件 + String selectCondition = getSelectCondition(parameterMap, fieldListCondition); + String ids = (String)parameterMap.get(FieldCommon.IDS); + // 勾选导出 + if (StrUtil.isNotBlank(ids)) { + List list = Arrays.asList(ids.split(",")); + selectCondition = selectCondition.replace("where"," and"); + String sql = "where id in ("; + StringBuilder sql2 = new StringBuilder(); + list.forEach(id -> { + sql2.append("'").append(id).append("',"); + }); + sql2.deleteCharAt(sql2.length() - 1).append(")"); + sql = sql + sql2; + selectCondition = sql + selectCondition; + } + + // 获取分页查询结果 + IPage> infoPage = lawsCommonMapper.getCommonPage(page, tableName, selectField, selectCondition); + // 对返回的数据做处理 + // 做字段翻译和拼接 + infoPage.setRecords(processResultMapPageList(infoPage.getRecords(), fieldListSelect)); + // 待处理 + return infoPage; + } + + @Override + public List getExportHeader(Map parameterMap) { + // 获取操作模块 + String module = (String) parameterMap.get(FieldCommon.MODULE); + + // 获取要操作的表名 + String tableName = TableNameEnum.getTableName(module); + // 获取全部字段 + List fieldList = lawsCommonMapper.getFieldList(tableName); + // 筛选表单显示的字段(传id查表单) + // 详情显示 + fieldList = fieldList.stream() + .filter(lawsTag -> YesOrNoEnum.YES.getValue().equals(lawsTag.getIsShowForm().toString())) + .filter(lawsTag -> !lawsTag.getFieldShowType().equals("8")) + .collect(Collectors.toList()); + return fieldList; + } + /** * @Author: liao * @Date: 2023/9/11 14:49 @@ -736,6 +811,96 @@ public class LawsCommonServiceImpl implements ILawsCommonService { return lawsCommonMapper.getSingleStandard(standardNumber); } + @Override + public void commonExport(HttpServletResponse response, Map parameterMap, String sheetName, String fileName) { + try { + // 创建表头 + List headers = this.getExportHeader(parameterMap); + // 获取数据 + IPage> commonPage = this.getExportData(parameterMap, headers); + List> records = commonPage.getRecords(); + + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet(sheetName); + + Row headerRow = sheet.createRow(0); + for (int i = 0; i < headers.size(); i++) { + Cell headerCell = headerRow.createCell(i); + headerCell.setCellValue(headers.get(i).getDbFieldTxt()); + } + + for (int i = 0; i < records.size(); i++) { + Map dataRowMap = records.get(i); + Row dataRow = sheet.createRow(i + 1); // +1因为第一行是表头 + + for (int j = 0; j < headers.size(); j++) { + Cell dataCell = dataRow.createCell(j); + Object value = dataRowMap.get(headers.get(j).getDbFieldName()); + if (value != null) { + dataCell.setCellValue(value.toString()); + } + } + } + + // 设置响应头和内容类型 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx"); + + // 写出到响应流 + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + log.error("导出excel异常", e); + throw new JeroBootException("导出excel异常", e); + } + + } + + @Override + public void exportDataWithFile(HttpServletResponse response, Map parameterMap, String sheetName, String fileName) { + try { + // 创建表头 + List headers = this.getExportHeader(parameterMap); + // 获取数据 + IPage> commonPage = this.getExportData(parameterMap, headers); + List> records = commonPage.getRecords(); + + XSSFWorkbook workbook = new XSSFWorkbook(); + XSSFSheet sheet = workbook.createSheet(sheetName); + + Row headerRow = sheet.createRow(0); + for (int i = 0; i < headers.size(); i++) { + Cell headerCell = headerRow.createCell(i); + headerCell.setCellValue(headers.get(i).getDbFieldTxt()); + } + + for (int i = 0; i < records.size(); i++) { + Map dataRowMap = records.get(i); + Row dataRow = sheet.createRow(i + 1); // +1因为第一行是表头 + + for (int j = 0; j < headers.size(); j++) { + Cell dataCell = dataRow.createCell(j); + Object value = dataRowMap.get(headers.get(j).getDbFieldName()); + if (value != null) { + dataCell.setCellValue(value.toString()); + } + } + } + + // 设置响应头和内容类型 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx"); + + // 写出到响应流 + workbook.write(response.getOutputStream()); + workbook.close(); + } catch (Exception e) { + log.error("导出excel异常", e); + throw new JeroBootException("导出excel异常", e); + } + } + + /** * @Author: liao * @Date: 2023/8/24 9:53 diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsEnterpriseController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsEnterpriseController.java index 777f1a8f..402c7a0c 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsEnterpriseController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsEnterpriseController.java @@ -1,5 +1,6 @@ package com.jero.modules.laws.standard.controller; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.common.api.vo.Result; @@ -8,9 +9,9 @@ import com.jero.common.util.MessageUtils; import com.jero.modules.laws.common.constant.FieldCommon; import com.jero.modules.laws.common.constant.ResultCommon; import com.jero.modules.laws.common.service.ILawsCommonService; -import com.jero.modules.laws.enterprise.entity.EnterpriseStandardAuthDept; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptService; import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthUserService; +import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.entity.LawsUpdateRecord; import com.jero.modules.laws.standard.entity.StandardTempPermission; import com.jero.modules.laws.standard.service.ILawsNodeRelationService; @@ -21,10 +22,20 @@ import com.jero.modules.tag.entity.LawsTag; import com.jero.modules.tag.enums.TableNameEnum; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.poi.ss.usermodel.Cell; +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.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jeecgframework.poi.excel.ExcelExportUtil; +import org.jeecgframework.poi.excel.entity.ExportParams; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; @@ -174,5 +185,17 @@ public class LawsEnterpriseController { return Result.OK(); } + @AutoLog(value = "企业法规标准-导出") + @ApiOperation(value="企业法规标准-导出", notes="企业法规标准-导出") + @PostMapping("/exportData") + public void exportData(HttpServletResponse response, @RequestBody Map parameterMap) { + lawsCommonService.commonExport(response, parameterMap, "企标导出", "企标导出"); + } + @AutoLog(value = "企业法规标准-带文件导出") + @ApiOperation(value="企业法规标准-带文件导出", notes="企业法规标准-带文件导出") + @PostMapping("/exportDataWithFile") + public void exportDataWithFile(HttpServletResponse response, @RequestBody Map parameterMap) { + lawsCommonService.exportDataWithFile(response, parameterMap, "企标导出", "企标导出"); + } }