🐛 修复账单导出运单号格式和列宽
This commit is contained in:
@@ -115,13 +115,13 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
private static final int TEMPLATE_FOOTER_START_ROW = 5;
|
||||
private static final int TEMPLATE_COLUMN_COUNT = 21;
|
||||
private static final double EXPORT_DETAIL_ROW_HEIGHT = 20.0;
|
||||
/** 客户订单号、运单号位于 Excel 的 C、D 列,按给定样例长度并额外保留两字符边距。 */
|
||||
/** 客户订单号、运单号位于 Excel 的 C、D 列,并保持相同列宽。 */
|
||||
private static final int CUSTOMER_ORDER_NO_COLUMN_INDEX = 3;
|
||||
private static final int TRACKING_NO_COLUMN_INDEX = 4;
|
||||
private static final int FORMULA_COLUMN_INDEX = 16;
|
||||
private static final int FEE_TYPE_COLUMN_INDEX = 17;
|
||||
private static final double MIN_CUSTOMER_ORDER_NO_COLUMN_WIDTH = 16.0;
|
||||
private static final double MIN_TRACKING_NO_COLUMN_WIDTH = 30.0;
|
||||
private static final double MIN_TRACKING_NO_COLUMN_WIDTH = MIN_CUSTOMER_ORDER_NO_COLUMN_WIDTH;
|
||||
private static final double MIN_FORMULA_COLUMN_WIDTH = 17.0;
|
||||
private static final double MIN_FEE_TYPE_COLUMN_WIDTH = 10.0;
|
||||
/**
|
||||
@@ -1337,6 +1337,14 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
failedDetailStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
|
||||
failedDetailStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
|
||||
int failedDetailStyleIndex = Short.toUnsignedInt(failedDetailStyle.getIndex());
|
||||
XSSFCellStyle trackingNoStyle = styles.createCellStyle();
|
||||
trackingNoStyle.cloneStyleFrom(styles.getStyleAt(TEMPLATE_DETAIL_STYLE_INDEX));
|
||||
trackingNoStyle.setDataFormat(BuiltinFormats.getBuiltinFormat("@"));
|
||||
int trackingNoStyleIndex = Short.toUnsignedInt(trackingNoStyle.getIndex());
|
||||
XSSFCellStyle failedTrackingNoStyle = styles.createCellStyle();
|
||||
failedTrackingNoStyle.cloneStyleFrom(failedDetailStyle);
|
||||
failedTrackingNoStyle.setDataFormat(BuiltinFormats.getBuiltinFormat("@"));
|
||||
int failedTrackingNoStyleIndex = Short.toUnsignedInt(failedTrackingNoStyle.getIndex());
|
||||
XSSFCellStyle failedDetailNoStyle = styles.createCellStyle();
|
||||
failedDetailNoStyle.cloneStyleFrom(failedDetailStyle);
|
||||
failedDetailNoStyle.setDataFormat(BuiltinFormats.getBuiltinFormat("0"));
|
||||
@@ -1357,6 +1365,7 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
output.putNextEntry(outputEntry);
|
||||
if (TEMPLATE_SHEET_XML.equals(entry.getName())) {
|
||||
writeOoxmlSheet(readUtf8(templateZip), bill, output, failedDetailStyleIndex,
|
||||
trackingNoStyleIndex, failedTrackingNoStyleIndex,
|
||||
detailNoStyleIndex, failedDetailNoStyleIndex, formulaStyleIndex, failedFormulaStyleIndex);
|
||||
replaced = true;
|
||||
} else if (TEMPLATE_STYLES_XML.equals(entry.getName())) {
|
||||
@@ -1417,6 +1426,7 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
* 以 XML 流方式写入表头、分页明细和银行信息,避免 POI 在大数据量下移动行。
|
||||
*/
|
||||
private void writeOoxmlSheet(String templateXml, ArBill bill, OutputStream output, int failedDetailStyleIndex,
|
||||
int trackingNoStyleIndex, int failedTrackingNoStyleIndex,
|
||||
int detailNoStyleIndex, int failedDetailNoStyleIndex,
|
||||
int formulaStyleIndex, int failedFormulaStyleIndex) throws IOException {
|
||||
int sheetDataStart = templateXml.indexOf("<sheetData");
|
||||
@@ -1452,6 +1462,7 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
attachFees(details);
|
||||
for (ArBillDetail detail : details) {
|
||||
writeOoxmlDetailRow(output, rowIndex++, detail, failedDetailStyleIndex,
|
||||
trackingNoStyleIndex, failedTrackingNoStyleIndex,
|
||||
detailNoStyleIndex, failedDetailNoStyleIndex, formulaStyleIndex, failedFormulaStyleIndex);
|
||||
}
|
||||
lastDetailNo = details.get(details.size() - 1).getDetailNo();
|
||||
@@ -1601,6 +1612,7 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
}
|
||||
|
||||
private void writeOoxmlDetailRow(OutputStream output, int rowNumber, ArBillDetail detail, int failedDetailStyleIndex,
|
||||
int trackingNoStyleIndex, int failedTrackingNoStyleIndex,
|
||||
int detailNoStyleIndex, int failedDetailNoStyleIndex,
|
||||
int formulaStyleIndex, int failedFormulaStyleIndex) throws IOException {
|
||||
String failureDescription = exportBillingFailDescription(detail.getBillingFailStatus());
|
||||
@@ -1623,9 +1635,14 @@ public class ArBillServiceImpl implements IArBillService {
|
||||
row.append("<row r=\"").append(rowNumber).append("\" ht=\"")
|
||||
.append(EXPORT_DETAIL_ROW_HEIGHT).append("\" customHeight=\"true\" spans=\"1:21\">");
|
||||
for (int index = 0; index < TEMPLATE_COLUMN_COUNT; index++) {
|
||||
int cellStyleIndex = index == 0 ? sequenceStyleIndex
|
||||
: index == FORMULA_COLUMN_INDEX - 1
|
||||
? (failedDetail ? failedFormulaStyleIndex : formulaStyleIndex) : styleIndex;
|
||||
int cellStyleIndex = styleIndex;
|
||||
if (index == 0) {
|
||||
cellStyleIndex = sequenceStyleIndex;
|
||||
} else if (index == TRACKING_NO_COLUMN_INDEX - 1) {
|
||||
cellStyleIndex = failedDetail ? failedTrackingNoStyleIndex : trackingNoStyleIndex;
|
||||
} else if (index == FORMULA_COLUMN_INDEX - 1) {
|
||||
cellStyleIndex = failedDetail ? failedFormulaStyleIndex : formulaStyleIndex;
|
||||
}
|
||||
appendOoxmlCell(row, (char) ('A' + index) + String.valueOf(rowNumber), values[index], cellStyleIndex);
|
||||
}
|
||||
row.append("</row>");
|
||||
|
||||
Reference in New Issue
Block a user