🐛 修复应收账单收货时间范围导出类型异常

This commit is contained in:
caojia
2026-10-12 10:23:55 +08:00
parent 35cbeb8adc
commit 980ab1d251
3 changed files with 37 additions and 10 deletions
@@ -12,6 +12,8 @@ import java.nio.file.StandardCopyOption;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -1319,6 +1321,7 @@ public class ArBillServiceImpl implements IArBillService {
}
Map<Integer, String> templateRows = extractTemplateRows(templateXml.substring(sheetDataOpenEnd + 1, sheetDataEnd));
Map<String, Object> receiveTimeRange = detailMapper.selectReceiveTimeRangeByBillId(bill.getArBillId());
String prefix = adjustExportColumnWidths(
removeSheetDimension(templateXml.substring(0, sheetDataOpenEnd + 1)));
writeUtf8(output, prefix);
@@ -1329,7 +1332,7 @@ public class ArBillServiceImpl implements IArBillService {
writeUtf8(output, templateRows.get(2));
String customerRow = replaceCellXml(templateRows.get(3), "C3", bill.getCustomerName(), false);
// 账单所属期区域为 O3:T3 合并单元格,必须写入左上角 O3 才能显示。
customerRow = replaceCellXml(customerRow, "O3", exportPeriod(bill), false);
customerRow = replaceCellXml(customerRow, "O3", exportReceiveTimeRange(receiveTimeRange), false);
writeUtf8(output, customerRow);
writeUtf8(output, templateRows.get(4));
@@ -1731,17 +1734,32 @@ public class ArBillServiceImpl implements IArBillService {
return StringUtils.isEmpty(detail.getRemark()) ? detail.getGoodsDescription() : detail.getRemark();
}
private String exportPeriod(ArBill bill) {
Date start = bill.getBillPeriodStart();
Date end = bill.getBillPeriodEnd();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
if (start != null && end != null) {
return format.format(start) + " 至 " + format.format(end);
private String exportReceiveTimeRange(Map<String, Object> receiveTimeRange) {
if (receiveTimeRange == null) {
return "";
}
if (start != null) {
return format.format(start) + " 起";
String start = formatReceiveDate(receiveTimeRange.get("minReceiveTime"));
String end = formatReceiveDate(receiveTimeRange.get("maxReceiveTime"));
return StringUtils.isEmpty(start) || StringUtils.isEmpty(end) ? "" : start + " 至 " + end;
}
private String formatReceiveDate(Object value) {
if (value instanceof LocalDateTime) {
return ((LocalDateTime) value).toLocalDate().toString();
}
return end == null ? "" : "截至 " + format.format(end);
if (value instanceof LocalDate) {
return value.toString();
}
if (value instanceof java.sql.Date) {
return ((java.sql.Date) value).toLocalDate().toString();
}
if (value instanceof Date) {
return new SimpleDateFormat("yyyy-MM-dd").format((Date) value);
}
if (value == null) {
return "";
}
throw new IllegalArgumentException("不支持的收货时间类型: " + value.getClass().getName());
}
private BigDecimal exportUnitPrice(ArBillDetail detail) {