mirror of
https://github.com/getrebuild/rebuild.git
synced 2024-09-20 07:25:54 +08:00
be
This commit is contained in:
parent
ed2cb1083a
commit
e83a3277cc
2
@rbv
2
@rbv
|
@ -1 +1 @@
|
|||
Subproject commit f07527b06b21bee5e2bf6b927b733903178c1954
|
||||
Subproject commit 6e417047e85ea8813744b5d6317ad7b26c10747f
|
|
@ -81,8 +81,8 @@ import static com.rebuild.core.service.datareport.TemplateExtractor33.NROW_PREFI
|
|||
@Slf4j
|
||||
public class EasyExcelGenerator extends SetUser {
|
||||
|
||||
final protected static String DKEY_RECORD_MAIN = ".";
|
||||
final protected static String DKEY_LIST = DKEY_RECORD_MAIN + "36LIST";
|
||||
final protected static String REFKEY_RECORD_MAIN = ".";
|
||||
final protected static String REFKEY_LIST = REFKEY_RECORD_MAIN + "36LIST";
|
||||
|
||||
protected File templateFile;
|
||||
protected Integer writeSheetAt = null;
|
||||
|
@ -113,9 +113,9 @@ public class EasyExcelGenerator extends SetUser {
|
|||
|
||||
// 记录模板-主记录
|
||||
Map<String, Object> main = null;
|
||||
if (datas.containsKey(DKEY_RECORD_MAIN)) {
|
||||
main = datas.get(DKEY_RECORD_MAIN).get(0);
|
||||
datas.remove(DKEY_RECORD_MAIN);
|
||||
if (datas.containsKey(REFKEY_RECORD_MAIN)) {
|
||||
main = datas.get(REFKEY_RECORD_MAIN).get(0);
|
||||
datas.remove(REFKEY_RECORD_MAIN);
|
||||
}
|
||||
|
||||
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
|
||||
|
@ -126,18 +126,20 @@ public class EasyExcelGenerator extends SetUser {
|
|||
.registerWriteHandler(new FormulaCellWriteHandler())
|
||||
.build();
|
||||
|
||||
// 一个列表/列表模板
|
||||
if (datas.size() == 1) {
|
||||
Object datas35 = datas.values().iterator().next();
|
||||
excelWriter.fill(datas35, fillConfig, writeSheet);
|
||||
int datasLen = datas.size();
|
||||
boolean useRefKeys = datasLen > 1;
|
||||
if (datasLen == 1) {
|
||||
String refKey = datas.keySet().iterator().next();
|
||||
useRefKeys = refKey.startsWith("$");
|
||||
}
|
||||
// fix: v3.6 多个列表
|
||||
else if (datas.size() > 1) {
|
||||
|
||||
// fix: v3.6 多个列表 $前缀
|
||||
if (useRefKeys) {
|
||||
for (Map.Entry<String, List<Map<String, Object>>> e : datas.entrySet()) {
|
||||
final String refKey = NROW_PREFIX2 + e.getKey().substring(1);
|
||||
final List<Map<String, Object>> refDatas = e.getValue();
|
||||
|
||||
List<Map<String, Object>> refDatasNew = new ArrayList<>();
|
||||
List<Map<String, Object>> refDatas2New = new ArrayList<>();
|
||||
for (Map<String, Object> map : refDatas) {
|
||||
Map<String, Object> mapNew = new HashMap<>();
|
||||
for (Map.Entry<String, Object> ee : map.entrySet()) {
|
||||
|
@ -145,12 +147,17 @@ public class EasyExcelGenerator extends SetUser {
|
|||
if (keyNew.startsWith("$") || keyNew.startsWith(".")) keyNew = keyNew.substring(1);
|
||||
mapNew.put(keyNew, ee.getValue());
|
||||
}
|
||||
refDatasNew.add(mapNew);
|
||||
refDatas2New.add(mapNew);
|
||||
}
|
||||
|
||||
excelWriter.fill(new FillWrapper(refKey, refDatasNew), fillConfig, writeSheet);
|
||||
excelWriter.fill(new FillWrapper(refKey, refDatas2New), fillConfig, writeSheet);
|
||||
}
|
||||
}
|
||||
// 一个列表/列表模板
|
||||
else if (datasLen == 1) {
|
||||
Object datas35 = datas.values().iterator().next();
|
||||
excelWriter.fill(datas35, fillConfig, writeSheet);
|
||||
}
|
||||
|
||||
// 主记录
|
||||
if (main != null) {
|
||||
|
@ -255,7 +262,7 @@ public class EasyExcelGenerator extends SetUser {
|
|||
Assert.notNull(record, "No record found : " + recordId);
|
||||
|
||||
Map<String, Object> d = buildData(record, varsMapOfMain);
|
||||
datas.put(DKEY_RECORD_MAIN, Collections.singletonList(d));
|
||||
datas.put(REFKEY_RECORD_MAIN, Collections.singletonList(d));
|
||||
}
|
||||
|
||||
// 明细
|
||||
|
@ -276,7 +283,7 @@ public class EasyExcelGenerator extends SetUser {
|
|||
detailList.add(buildData(c, varsMapOfDetail));
|
||||
phNumber++;
|
||||
}
|
||||
datas.put(DKEY_RECORD_MAIN + "detail", detailList);
|
||||
datas.put(REFKEY_RECORD_MAIN + "detail", detailList);
|
||||
}
|
||||
|
||||
// 审批
|
||||
|
@ -295,7 +302,7 @@ public class EasyExcelGenerator extends SetUser {
|
|||
approvalList.add(buildData(c, varsMapOfApproval));
|
||||
phNumber++;
|
||||
}
|
||||
datas.put(DKEY_RECORD_MAIN + "approval", approvalList);
|
||||
datas.put(REFKEY_RECORD_MAIN + "approval", approvalList);
|
||||
}
|
||||
|
||||
return datas;
|
||||
|
|
|
@ -65,7 +65,7 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
final private List<ID> recordIdMultiple;
|
||||
|
||||
private Set<String> inShapeVars;
|
||||
private Map<String, Object> mdataHolder;
|
||||
private Map<String, Object> recordMainHolder;
|
||||
|
||||
protected EasyExcelGenerator33(File templateFile, ID recordId) {
|
||||
super(templateFile, recordId);
|
||||
|
@ -98,9 +98,9 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
String refKey = null;
|
||||
if (varName.startsWith(NROW_PREFIX) || varName.startsWith(NROW_PREFIX2)) {
|
||||
if (varName.startsWith(APPROVAL_PREFIX) || varName.startsWith(APPROVAL_PREFIX2)) {
|
||||
refKey = APPROVAL_PREFIX;
|
||||
refKey = varName.startsWith(NROW_PREFIX) ? APPROVAL_PREFIX : APPROVAL_PREFIX2;
|
||||
} else if (varName.startsWith(DETAIL_PREFIX) || varName.startsWith(DETAIL_PREFIX2)) {
|
||||
refKey = DETAIL_PREFIX;
|
||||
refKey = varName.startsWith(NROW_PREFIX) ? DETAIL_PREFIX : DETAIL_PREFIX2;
|
||||
} else {
|
||||
// 在客户中导出订单(下列 AccountId 为订单中引用客户的引用字段)
|
||||
// .AccountId.SalesOrder.SalesOrderName or $AccountId$SalesOrder$SalesOrderName
|
||||
|
@ -120,7 +120,9 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
}
|
||||
|
||||
// 占位字段
|
||||
if (TemplateExtractor33.isPlaceholder(varName)) continue;
|
||||
if (TemplateExtractor33.isPlaceholder(varName)) {
|
||||
continue;
|
||||
}
|
||||
// 无效字段
|
||||
if (fieldName == null) {
|
||||
log.warn("Invalid field `{}` in template : {}", e.getKey(), templateFile);
|
||||
|
@ -155,14 +157,15 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
Assert.notNull(record, "No record found : " + recordId);
|
||||
|
||||
Map<String, Object> d = buildData(record, varsMapOfMain);
|
||||
datas.put(DKEY_RECORD_MAIN, Collections.singletonList(d));
|
||||
mdataHolder = d;
|
||||
datas.put(REFKEY_RECORD_MAIN, Collections.singletonList(d));
|
||||
recordMainHolder = d;
|
||||
}
|
||||
|
||||
// 相关记录(含明细、审批)
|
||||
for (Map.Entry<String, List<String>> e : fieldsOfRefs.entrySet()) {
|
||||
final String refKey = e.getKey();
|
||||
final boolean isApproval = refKey.startsWith(APPROVAL_PREFIX);
|
||||
final boolean isApproval = refKey.startsWith(APPROVAL_PREFIX) || refKey.startsWith(APPROVAL_PREFIX2);
|
||||
final boolean isDetail = refKey.startsWith(DETAIL_PREFIX) || refKey.startsWith(DETAIL_PREFIX2);
|
||||
|
||||
String querySql = baseSql;
|
||||
if (isApproval) {
|
||||
|
@ -170,12 +173,11 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
querySql = String.format(querySql, StringUtils.join(e.getValue(), ","),
|
||||
"createdOn,recordId,state,stepId", "RobotApprovalStep", "recordId");
|
||||
|
||||
} else if (refKey.startsWith(DETAIL_PREFIX)) {
|
||||
Entity de = entity.getDetailEntity();
|
||||
|
||||
} else if (isDetail) {
|
||||
String sortField = templateExtractor33.getSortField(DETAIL_PREFIX);
|
||||
querySql += " order by " + StringUtils.defaultIfBlank(sortField, "createdOn asc");
|
||||
|
||||
Entity de = entity.getDetailEntity();
|
||||
querySql = String.format(querySql, StringUtils.join(e.getValue(), ","),
|
||||
de.getPrimaryField().getName(), de.getName(), MetadataHelper.getDetailToMainField(de).getName());
|
||||
|
||||
|
@ -312,7 +314,7 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
|
||||
private File superGenerate() {
|
||||
File file = super.generate();
|
||||
if (inShapeVars.isEmpty() || mdataHolder == null) return file;
|
||||
if (inShapeVars.isEmpty() || recordMainHolder == null) return file;
|
||||
|
||||
// v3.6 提取文本框
|
||||
try (Workbook wb = WorkbookFactory.create(file)) {
|
||||
|
@ -324,7 +326,7 @@ public class EasyExcelGenerator33 extends EasyExcelGenerator {
|
|||
while (matcher.find()) {
|
||||
String varName = matcher.group(1);
|
||||
if (StringUtils.isNotBlank(varName)) {
|
||||
shapeText = shapeText.replace("{" + varName +"}", String.valueOf(mdataHolder.get(varName)));
|
||||
shapeText = shapeText.replace("{" + varName +"}", String.valueOf(recordMainHolder.get(varName)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ public class EasyExcelListGenerator extends EasyExcelGenerator {
|
|||
if (varsMap.containsKey(PH__CURRENTDATETIME)) phValues.put(PH__CURRENTDATETIME, getPhValue(PH__CURRENTDATETIME));
|
||||
|
||||
Map<String, List<Map<String, Object>>> datasMap = new HashMap<>();
|
||||
datasMap.put(DKEY_LIST, datas);
|
||||
datasMap.put(REFKEY_LIST, datas);
|
||||
return datasMap;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue