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.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.google.gson.Gson;
|
||||
import io.dataease.commons.utils.AuthUtils;
|
||||
import io.dataease.commons.utils.PageUtils;
|
||||
import io.dataease.commons.utils.Pager;
|
||||
@ -187,8 +186,7 @@ public class DataFillController {
|
||||
|
||||
@ApiIgnore
|
||||
@PostMapping("/form/{formId}/excel/template")
|
||||
public void userFillData(@PathVariable String formId, HttpServletResponse response) throws Exception {
|
||||
try {
|
||||
public void getExcelTemplate(@PathVariable String formId, HttpServletResponse response) throws Exception {
|
||||
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
||||
response.setCharacterEncoding("utf-8");
|
||||
// 这里URLEncoder.encode可以防止中文乱码
|
||||
@ -197,18 +195,11 @@ public class DataFillController {
|
||||
// 这里需要设置不关闭流
|
||||
EasyExcel.write(response.getOutputStream())
|
||||
.head(dataFillService.getExcelHead(formId))
|
||||
.inMemory(true)
|
||||
.registerWriteHandler(dataFillService.getCommentWriteHandler(formId))
|
||||
.autoCloseStream(Boolean.FALSE)
|
||||
.sheet("模板")
|
||||
.doWrite(new ArrayList());
|
||||
} catch (Exception e) {
|
||||
// 重置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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
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) {
|
||||
List<List<String>> list = new ArrayList<>();
|
||||
@ -358,45 +381,18 @@ public class DataFillService {
|
||||
}.getType());
|
||||
for (ExtTableField formField : fields) {
|
||||
String name = formField.getSettings().getName();
|
||||
String required = formField.getSettings().isRequired() ? "\n必填" : "";
|
||||
|
||||
if (StringUtils.equalsIgnoreCase(formField.getType(), "dateRange")) {
|
||||
String name1 = 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> head2 = List.of(name2 + required + example);
|
||||
List<String> head1 = List.of(name1);
|
||||
List<String> head2 = List.of(name2);
|
||||
|
||||
list.add(head1);
|
||||
list.add(head2);
|
||||
} else {
|
||||
String example = "";
|
||||
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;
|
||||
}
|
||||
list.add(List.of(name));
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user