forked from github/dataease
Merge pull request #9436 from ulleo/dev
feat(X-Pack): 数据填报Excel模板字段头增加批注
This commit is contained in:
commit
1f05f46a0e
@ -3,7 +3,6 @@ package io.dataease.controller.datafill;
|
|||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.github.pagehelper.Page;
|
import com.github.pagehelper.Page;
|
||||||
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageHelper;
|
||||||
import com.google.gson.Gson;
|
|
||||||
import io.dataease.commons.utils.AuthUtils;
|
import io.dataease.commons.utils.AuthUtils;
|
||||||
import io.dataease.commons.utils.PageUtils;
|
import io.dataease.commons.utils.PageUtils;
|
||||||
import io.dataease.commons.utils.Pager;
|
import io.dataease.commons.utils.Pager;
|
||||||
@ -187,28 +186,20 @@ public class DataFillController {
|
|||||||
|
|
||||||
@ApiIgnore
|
@ApiIgnore
|
||||||
@PostMapping("/form/{formId}/excel/template")
|
@PostMapping("/form/{formId}/excel/template")
|
||||||
public void userFillData(@PathVariable String formId, HttpServletResponse response) throws Exception {
|
public void getExcelTemplate(@PathVariable String formId, HttpServletResponse response) throws Exception {
|
||||||
try {
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setCharacterEncoding("utf-8");
|
||||||
response.setCharacterEncoding("utf-8");
|
// 这里URLEncoder.encode可以防止中文乱码
|
||||||
// 这里URLEncoder.encode可以防止中文乱码
|
String fileName = URLEncoder.encode("template", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
||||||
String fileName = URLEncoder.encode("template", StandardCharsets.UTF_8).replaceAll("\\+", "%20");
|
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
||||||
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
|
// 这里需要设置不关闭流
|
||||||
// 这里需要设置不关闭流
|
EasyExcel.write(response.getOutputStream())
|
||||||
EasyExcel.write(response.getOutputStream())
|
.head(dataFillService.getExcelHead(formId))
|
||||||
.head(dataFillService.getExcelHead(formId))
|
.inMemory(true)
|
||||||
.autoCloseStream(Boolean.FALSE)
|
.registerWriteHandler(dataFillService.getCommentWriteHandler(formId))
|
||||||
.sheet("模板")
|
.autoCloseStream(Boolean.FALSE)
|
||||||
.doWrite(new ArrayList());
|
.sheet("模板")
|
||||||
} catch (Exception e) {
|
.doWrite(new ArrayList());
|
||||||
// 重置response
|
|
||||||
response.reset();
|
|
||||||
response.setContentType("application/json");
|
|
||||||
response.setCharacterEncoding("utf-8");
|
|
||||||
|
|
||||||
ResultHolder resultHolder = ResultHolder.error("get template excel error", e);
|
|
||||||
response.getWriter().println(new Gson().toJson(resultHolder));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiIgnore
|
@ApiIgnore
|
||||||
|
@ -0,0 +1,85 @@
|
|||||||
|
package io.dataease.service.datafill;
|
||||||
|
|
||||||
|
import com.alibaba.excel.write.handler.RowWriteHandler;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||||
|
import io.dataease.plugins.common.dto.datafill.ExtTableField;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.apache.poi.ss.usermodel.Comment;
|
||||||
|
import org.apache.poi.ss.usermodel.Drawing;
|
||||||
|
import org.apache.poi.ss.usermodel.Row;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class CommentWriteHandler implements RowWriteHandler {
|
||||||
|
|
||||||
|
private List<ExtTableField> fields;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Integer rowIndex, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterRowCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
if (isHead) {
|
||||||
|
Drawing<?> drawingPatriarch = writeSheetHolder.getSheet().createDrawingPatriarch();
|
||||||
|
for (int i = 0; i < fields.size(); i++) {
|
||||||
|
ExtTableField field = fields.get(i);
|
||||||
|
String required = field.getSettings().isRequired() ? "必填" : "";
|
||||||
|
String example = "";
|
||||||
|
StringBuilder options = new StringBuilder();
|
||||||
|
switch (field.getSettings().getMapping().getType()) {
|
||||||
|
case datetime:
|
||||||
|
example = "\n(日期格式: yyyy/MM/dd" + (field.getSettings().isEnableTime() ? " HH:mm:ss" : "") + ")";
|
||||||
|
break;
|
||||||
|
case number:
|
||||||
|
example = "\n(整形数字)";
|
||||||
|
break;
|
||||||
|
case decimal:
|
||||||
|
example = "\n(小数数字)";
|
||||||
|
break;
|
||||||
|
case text:
|
||||||
|
case nvarchar:
|
||||||
|
if (StringUtils.equalsIgnoreCase("select", field.getType()) && field.getSettings().isMultiple() || StringUtils.equalsIgnoreCase("checkbox", field.getType())) {
|
||||||
|
example = "\n(多个值使用分号\";\"分割)";
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("email", field.getSettings().getInputType())) {
|
||||||
|
example = "\n(邮箱格式)";
|
||||||
|
} else if (StringUtils.equalsIgnoreCase("phone", field.getSettings().getInputType())) {
|
||||||
|
example = "\n(手机号格式)";
|
||||||
|
}
|
||||||
|
if (StringUtils.equalsIgnoreCase("select", field.getType()) || StringUtils.equalsIgnoreCase("checkbox", field.getType())) {
|
||||||
|
options = new StringBuilder("\n选项值为:\n");
|
||||||
|
for (ExtTableField.Option option : field.getSettings().getOptions()) {
|
||||||
|
options.append(option.getName()).append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StringUtils.isBlank(required) && StringUtils.isBlank(example) && StringUtils.isBlank(options.toString())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Comment comment = drawingPatriarch.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, (short) i + 1, i, (short) i + 7, i + 6));
|
||||||
|
comment.setString(new XSSFRichTextString(required + example + options.toString()));
|
||||||
|
|
||||||
|
row.getCell(i).setCellComment(comment);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -349,6 +349,29 @@ public class DataFillService {
|
|||||||
dataFillUserTaskMapper.updateByPrimaryKeySelective(task);
|
dataFillUserTaskMapper.updateByPrimaryKeySelective(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CommentWriteHandler getCommentWriteHandler(String formId) {
|
||||||
|
DataFillFormWithBLOBs dataFillForm = dataFillFormMapper.selectByPrimaryKey(formId);
|
||||||
|
List<ExtTableField> formFields = gson.fromJson(dataFillForm.getForms(), new TypeToken<List<ExtTableField>>() {
|
||||||
|
}.getType());
|
||||||
|
|
||||||
|
List<ExtTableField> fields = new ArrayList<>();
|
||||||
|
for (ExtTableField field : formFields) {
|
||||||
|
if (StringUtils.equalsIgnoreCase(field.getType(), "dateRange")) {
|
||||||
|
ExtTableField start = gson.fromJson(gson.toJson(field), ExtTableField.class);
|
||||||
|
start.getSettings().getMapping().setColumnName(start.getSettings().getMapping().getColumnName1());
|
||||||
|
fields.add(start);
|
||||||
|
|
||||||
|
ExtTableField end = gson.fromJson(gson.toJson(field), ExtTableField.class);
|
||||||
|
end.getSettings().getMapping().setColumnName(end.getSettings().getMapping().getColumnName2());
|
||||||
|
fields.add(end);
|
||||||
|
} else {
|
||||||
|
fields.add(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CommentWriteHandler commentWriteHandler = new CommentWriteHandler();
|
||||||
|
commentWriteHandler.setFields(fields);
|
||||||
|
return commentWriteHandler;
|
||||||
|
}
|
||||||
|
|
||||||
public List<List<String>> getExcelHead(String formId) {
|
public List<List<String>> getExcelHead(String formId) {
|
||||||
List<List<String>> list = new ArrayList<>();
|
List<List<String>> list = new ArrayList<>();
|
||||||
@ -358,45 +381,18 @@ public class DataFillService {
|
|||||||
}.getType());
|
}.getType());
|
||||||
for (ExtTableField formField : fields) {
|
for (ExtTableField formField : fields) {
|
||||||
String name = formField.getSettings().getName();
|
String name = formField.getSettings().getName();
|
||||||
String required = formField.getSettings().isRequired() ? "\n必填" : "";
|
|
||||||
|
|
||||||
if (StringUtils.equalsIgnoreCase(formField.getType(), "dateRange")) {
|
if (StringUtils.equalsIgnoreCase(formField.getType(), "dateRange")) {
|
||||||
String name1 = formField.getSettings().getName() + "(开始时间) ";
|
String name1 = formField.getSettings().getName() + "(开始时间) ";
|
||||||
String name2 = formField.getSettings().getName() + "(结束时间) ";
|
String name2 = formField.getSettings().getName() + "(结束时间) ";
|
||||||
String example = "\n(日期格式: yyyy/MM/dd" + (formField.getSettings().isEnableTime() ? " HH:mm:ss" : "") + ")";
|
|
||||||
|
|
||||||
List<String> head1 = List.of(name1 + required + example);
|
List<String> head1 = List.of(name1);
|
||||||
List<String> head2 = List.of(name2 + required + example);
|
List<String> head2 = List.of(name2);
|
||||||
|
|
||||||
list.add(head1);
|
list.add(head1);
|
||||||
list.add(head2);
|
list.add(head2);
|
||||||
} else {
|
} else {
|
||||||
String example = "";
|
list.add(List.of(name));
|
||||||
switch (formField.getSettings().getMapping().getType()) {
|
|
||||||
case datetime:
|
|
||||||
example = "\n(日期格式: yyyy/MM/dd" + (formField.getSettings().isEnableTime() ? " HH:mm:ss" : "") + ")";
|
|
||||||
list.add(List.of(name + required + example));
|
|
||||||
break;
|
|
||||||
case number:
|
|
||||||
example = "\n(整形数字)";
|
|
||||||
list.add(List.of(name + required + example));
|
|
||||||
break;
|
|
||||||
case decimal:
|
|
||||||
example = "\n(小数数字)";
|
|
||||||
list.add(List.of(name + required + example));
|
|
||||||
break;
|
|
||||||
case text:
|
|
||||||
case nvarchar:
|
|
||||||
if (StringUtils.equalsIgnoreCase("select", formField.getType()) && formField.getSettings().isMultiple() || StringUtils.equalsIgnoreCase("checkbox", formField.getType())) {
|
|
||||||
example = "\n(多个值使用分号\";\"分割)";
|
|
||||||
} else if (StringUtils.equalsIgnoreCase("email", formField.getSettings().getInputType())) {
|
|
||||||
example = "\n(邮箱格式)";
|
|
||||||
} else if (StringUtils.equalsIgnoreCase("phone", formField.getSettings().getInputType())) {
|
|
||||||
example = "\n(手机号格式)";
|
|
||||||
}
|
|
||||||
list.add(List.of(name + required + example));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user