From 6400b3b513f308fbc48eb6dbccfacb17bf799229 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Mon, 25 Sep 2023 16:13:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=89=E6=A0=87=E9=80=9A=E7=94=A8-?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/LawsCommonServiceImpl.java | 132 ++++++++++++++++-- .../controller/LawsDomesticController.java | 7 + .../controller/LawsEnterpriseController.java | 2 +- .../controller/LawsOverseasController.java | 7 + .../modules/tag/enums/FieldShowTypeEnum.java | 54 +++++++ 5 files changed, 186 insertions(+), 16 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/tag/enums/FieldShowTypeEnum.java 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 78df539f..913acb82 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 @@ -39,14 +39,15 @@ import com.jero.modules.system.service.ISysDictItemService; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.tag.entity.LawsArea; import com.jero.modules.tag.entity.LawsTag; +import com.jero.modules.tag.enums.FieldShowTypeEnum; 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.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; @@ -56,8 +57,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; +import java.io.*; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.time.LocalDate; @@ -1111,19 +1111,121 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } } + /** + * 导入模板 + * @param response + * @param tableName + */ @Override public void templateDownload(HttpServletResponse response, String tableName) { - //TODO 模板下载 -// // 获取全部字段 -// List fieldList = lawsCommonMapper.getFieldList(tableName); -// -// // 筛选出新增要用的字段 -// fieldList = fieldList.stream().filter(lawsTag -> YesOrNoEnum.YES.getValue() -// .equals(lawsTag.getIsShowFormCreate().toString())).collect(Collectors.toList()); -// -// -// -// return areaMap; + // 获取全部字段 + List fieldList = lawsCommonMapper.getFieldList(tableName); + + // 筛选出新增要用的字段 + fieldList = fieldList.stream().filter(lawsTag -> YesOrNoEnum.YES.getValue() + .equals(lawsTag.getIsShowFormCreate().toString())).collect(Collectors.toList()); + + // 创建一个Excel工作簿 + Workbook workbook = new XSSFWorkbook(); + + // 创建一个工作表 + Sheet sheet = workbook.createSheet("导入模板"); + // 设置列宽 + for (int i = 0; i < fieldList.size(); i++) { + sheet.setColumnWidth(i, 15 * 256); + } + + // 创建红色字体 + Font redFont = workbook.createFont(); + redFont.setColor(IndexedColors.RED.getIndex()); + + // 创建默认字体(黑色) + Font defaultFont = workbook.createFont(); + defaultFont.setColor(IndexedColors.BLACK.getIndex()); + + // 创建第一行并添加字段 + Row row1 = sheet.createRow(0); + for (int i = 0; i < fieldList.size(); i++) { + LawsTag tag = fieldList.get(i); + String cellValue = tag.getDbFieldTxt(); + + // 创建单元格 + Cell cell = row1.createCell(i); + + // 判断是否为必填项 + if (YesOrNoEnum.YES.getValue().equals(tag.getFieldMustInput())) { + // 创建富文本字符串 + CreationHelper createHelper = workbook.getCreationHelper(); + RichTextString richString = createHelper.createRichTextString("*" + cellValue); + + // 设置 * 为红色 + richString.applyFont(0, 1, redFont); + + // 设置其他文字为默认样式(黑色) + richString.applyFont(1, richString.length(), defaultFont); + + // 设置单元格的值 + cell.setCellValue(richString); + } else { + cell.setCellValue(cellValue); + } + } + + // 创建第二行并合并单元格 + Row row2 = sheet.createRow(1); + row2.setHeightInPoints(95); + // 创建一个单元格样式,并设置为自动换行 + CellStyle style = workbook.createCellStyle(); + style.setWrapText(true); + sheet.addMergedRegion(new CellRangeAddress( + 1, + 1, + 0, + fieldList.size() - 1 + )); + Cell cell2 = row2.createCell(0); + cell2.setCellValue("填写说明:\n" + + "1.所有带星号的为必填\n" + + "2.导入数据从第四行开始,第一行为表头,第二行为填写说明,第三行为示例。第四行才是正式数据\n" + + "3.字段为多选属性,必须与系统中对应选项字段相匹配,填写多个时使用逗号隔开\n" + + "4.字段为文件属性,填写时需在本文件同级目录下以标准号为名称建立文件夹,并在文件夹内放置文件。假设在A标准号的文件夹内放置了A1文件,那么单元格需填写:A/A1.pdf"); + // 应用样式到单元格 + cell2.setCellStyle(style); + // 创建第三行并添加固定内容 + Row row3 = sheet.createRow(2); + row3.setHeightInPoints(105); + this.setRow3CellValue(row3, fieldList); + + // 设置HTTP响应头 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", "attachment; filename=\"导入模板.xlsx\""); + + // 获取响应输出流并写入Excel + try (OutputStream out = response.getOutputStream()) { + workbook.write(out); + out.flush(); + } catch (IOException e) { + log.error("导出Excel失败", e); + } finally { + try { + workbook.close(); + } catch (IOException e) { + log.error("导出Excel失败", e); + } + } + } + + /** + * 设置导入模板的第三行提示内容 + * @param row3 + * @param fieldList + */ + private void setRow3CellValue(Row row3, List fieldList) { + for (int i = 0; i < fieldList.size(); i++) { + // 创建单元格 + Cell cell = row3.createCell(i); + cell.setCellValue(FieldShowTypeEnum.getDescription(fieldList.get(i).getFieldShowType())); + } } /** diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDomesticController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDomesticController.java index 3ccf0bac..0b5ce82e 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDomesticController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsDomesticController.java @@ -153,4 +153,11 @@ public class LawsDomesticController { lawsCommonService.exportDataWithFile(response, parameterMap, "国标导出", "国标导出"); } + @AutoLog(value = "国内法规标准-模板下载") + @ApiOperation(value="国内法规标准-模板下载", notes="国内法规标准-模板下载") + @GetMapping("/templateDownload") + public void templateDownload(HttpServletResponse response) { + lawsCommonService.templateDownload(response, TableNameEnum.DOMESTIC_REGULATIONS.getTableName()); + } + } 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 97813c26..f29720f3 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 @@ -210,7 +210,7 @@ public class LawsEnterpriseController { @AutoLog(value = "企业法规标准-模板下载") @ApiOperation(value="企业法规标准-模板下载", notes="企业法规标准-模板下载") - @PostMapping("/templateDownload") + @GetMapping("/templateDownload") public void templateDownload(HttpServletResponse response) { lawsCommonService.templateDownload(response, TableNameEnum.ENTERPRISE_STANDARDS.getTableName()); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsOverseasController.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsOverseasController.java index 35263aa0..0936bb66 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsOverseasController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/controller/LawsOverseasController.java @@ -152,4 +152,11 @@ public class LawsOverseasController { public void exportDataWithFile(HttpServletResponse response, @RequestBody(required = false) Map parameterMap) { lawsCommonService.exportDataWithFile(response, parameterMap, "外标导出", "外标导出"); } + + @AutoLog(value = "海外法规标准-模板下载") + @ApiOperation(value="海外法规标准-模板下载", notes="海外法规标准-模板下载") + @GetMapping("/templateDownload") + public void templateDownload(HttpServletResponse response) { + lawsCommonService.templateDownload(response, TableNameEnum.FOREIGN_REGULATIONS.getTableName()); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/tag/enums/FieldShowTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/tag/enums/FieldShowTypeEnum.java new file mode 100644 index 00000000..72e0c1a3 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/tag/enums/FieldShowTypeEnum.java @@ -0,0 +1,54 @@ +package com.jero.modules.tag.enums; + +import com.jero.common.exception.JeroBootException; + +/** + * @author: Mzaxd + * @Date: 2023/9/25 15:42 + */ +public enum FieldShowTypeEnum { + + SINGLE_DATE_PICKER("单日期选择","1","请填写选项中包含的文本"), + SINGLE_USER_DIALOG("单选用户弹框","2","请填写选项中包含的文本"), + SINGLE_ORGANIZATION_DIALOG("单选组织机构弹框","3","请填写选项中包含的文本"), + MULTI_DATE_PICKER("多日期选择","4","4"), + MULTI_TEXT("多行文本","5","文本输入"), + MULTI_STANDARD_DIALOG("多选标准弹框","6","请填写选项中包含的文本,多填以逗号隔开"), + MULTI_ORGANIZATION_DIALOG("多选组织机构弹框","7","请填写选项中包含的文本,多填以逗号隔开"), + FILE_UPLOAD("上传文件","8","文件属性,请输入:标准号/文件名称.文件格式"), + TEXT_BOX("文本框","9","文本输入"), + DROPDOWN_SINGLE_SELECT("下拉单选","10","4"), + DROPDOWN_MULTI_SELECT("下拉多选","11","请填写选项中包含的文本,多填以逗号隔开"), + TREE_STRUCTURE_MULTI_SELECT("条款拆分","12","请填写选项中包含的文本,多填以逗号隔开"), + LINK_INPUT_BOX("输入框(链接)","13","请填写选项中包含的文本"), + YEAR_SELECT("条款拆分","14","请填写选项中包含的文本"), + TREE_STRUCTURE_SINGLE_SELECT("树形结构(单选)","15","请填写选项中包含的文本") + ; + + final String name; + final String value; + final String description; + + FieldShowTypeEnum(String name, String value, String description) { + this.name = name; + this.value = value; + this.description = description; + } + + public static String getDescription(String value){ + for (FieldShowTypeEnum fieldShowTypeEnum : values()) { + if (fieldShowTypeEnum.getValue().equals(value)) { + return fieldShowTypeEnum.getDescription(); + } + } + throw new JeroBootException("标签类型不存在"); + } + + public String getValue() { + return value; + } + + public String getDescription() { + return description; + } +}