From 26a3285571a1c3dff660973531aa50ccc958828b Mon Sep 17 00:00:00 2001 From: caojia <1301869380@qq.com> Date: Wed, 21 Oct 2026 14:18:27 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20=E4=BF=AE=E5=A4=8D=E8=B4=A6=E5=8D=95?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=BF=90=E5=8D=95=E5=8F=B7=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=92=8C=E5=88=97=E5=AE=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/service/impl/ArBillServiceImpl.java | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java index 6753d359..7bf53c84 100644 --- a/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/bms-system/src/main/java/com/bms/ar/service/impl/ArBillServiceImpl.java @@ -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(""); 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("");