|
|
@@ -0,0 +1,72 @@
|
|
|
+package com.common.workflow.service.util;
|
|
|
+
|
|
|
+import com.common.workflow.service.dto.TableDetailData;
|
|
|
+import com.deepoove.poi.data.RowRenderData;
|
|
|
+import com.deepoove.poi.data.TextRenderData;
|
|
|
+import com.deepoove.poi.policy.DynamicTableRenderPolicy;
|
|
|
+import com.deepoove.poi.policy.MiniTableRenderPolicy;
|
|
|
+import com.deepoove.poi.util.TableTools;
|
|
|
+import org.apache.poi.xwpf.usermodel.XWPFTable;
|
|
|
+import org.apache.poi.xwpf.usermodel.XWPFTableRow;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.LinkedHashMap;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+public class DetailTablePolicy extends DynamicTableRenderPolicy {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void render(XWPFTable table, Object data) {
|
|
|
+ if (null == data) return;
|
|
|
+ LinkedHashMap<String, Object> detailData = (LinkedHashMap) data;
|
|
|
+
|
|
|
+ List<RowRenderData> datas = new ArrayList<>();
|
|
|
+ List<HashMap<String, Object>> dataMapList = (List<HashMap<String, Object>>) detailData.get("dataList");
|
|
|
+ List<String> colsList = (List<String>) detailData.get("cols");
|
|
|
+ List<String> mergeList = (List<String>) detailData.get("merge");
|
|
|
+ for (HashMap<String, Object> dataMap : dataMapList) {
|
|
|
+ List<TextRenderData> rowdataList = new ArrayList<>();
|
|
|
+ if (null != colsList && colsList.size() > 0) {
|
|
|
+ for (String key : colsList ) {
|
|
|
+ rowdataList.add(new TextRenderData(dataMap.get(key).toString()));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ dataMap.forEach((k,v) -> {
|
|
|
+ rowdataList.add(new TextRenderData(v.toString()));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ RowRenderData rowData = new RowRenderData(rowdataList);
|
|
|
+ datas.add(rowData);
|
|
|
+ }
|
|
|
+ // 货品填充数据所在行数
|
|
|
+ int goodsStartRow = Integer.parseInt(detailData.get("startRow").toString()); //detailData.getStartRow();
|
|
|
+ int needDelRowNum = Integer.parseInt(detailData.get("needDelRow").toString()); //detailData.getNeedDelRow();
|
|
|
+ int colsNum = Integer.parseInt(detailData.get("colsNum").toString());
|
|
|
+
|
|
|
+
|
|
|
+ if (null != datas) {
|
|
|
+ for (int i = 0; i < needDelRowNum; i++) {
|
|
|
+ table.removeRow(goodsStartRow);
|
|
|
+ }
|
|
|
+
|
|
|
+ for (int i = 0; i < datas.size(); i++) {
|
|
|
+ XWPFTableRow insertNewTableRow = table.insertNewTableRow(goodsStartRow);
|
|
|
+ int tmpNum = colsNum;
|
|
|
+ if (tmpNum <= 0) {
|
|
|
+ tmpNum = datas.get(i).size();
|
|
|
+ }
|
|
|
+ for (int j = 0; j < tmpNum; j++) {
|
|
|
+ insertNewTableRow.createCell();
|
|
|
+ }
|
|
|
+ for (String merge : mergeList) {
|
|
|
+ // 合并单元格
|
|
|
+ TableTools.mergeCellsHorizonal(table, goodsStartRow, Integer.parseInt(merge.split(",")[0]), Integer.parseInt(merge.split(",")[1]));
|
|
|
+
|
|
|
+ }
|
|
|
+ // 渲染单行货品明细数据
|
|
|
+ MiniTableRenderPolicy.renderRow(table, goodsStartRow, datas.get(i));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|