diff --git a/src/main/java/com/xujie/sys/common/utils/ExcelTemplateALPHA.java b/src/main/java/com/xujie/sys/common/utils/ExcelTemplateALPHA.java index a62a3f02..da779051 100644 --- a/src/main/java/com/xujie/sys/common/utils/ExcelTemplateALPHA.java +++ b/src/main/java/com/xujie/sys/common/utils/ExcelTemplateALPHA.java @@ -46,6 +46,9 @@ public class ExcelTemplateALPHA { // 价格靠右 发票 @Setter private boolean invoiceLie = false; + // 发票价格列是否使用固定小数位(单价5位、总价2位) + @Setter + private boolean fixedInvoicePriceScale = false; // 数字靠右 箱单 @Setter private boolean intRight = false; @@ -142,6 +145,7 @@ public class ExcelTemplateALPHA { cellStyle2 = false; rangeStyle = false; priceRight = false; + fixedInvoicePriceScale = false; intRight = false; delRight = false; } @@ -290,6 +294,8 @@ public class ExcelTemplateALPHA { Set dtlRows = new LinkedHashSet<>(); List boxRows = new ArrayList<>(); Set poNoCols = new HashSet<>(); + Set invoiceUnitPriceCols = new HashSet<>(); + Set invoiceTotalPriceCols = new HashSet<>(); //整体填值 for (int i = 0; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); @@ -313,6 +319,17 @@ public class ExcelTemplateALPHA { if (i == dtlRowIndex && "#{po_no}".equalsIgnoreCase(cellValue)) { poNoCols.add(j); } + if (i == dtlRowIndex) { + Matcher matcherDtlField = PATTERN_DTL_FIELD.matcher(cellValue); + while (matcherDtlField.find()) { + String dtlField = matcherDtlField.group(1); + if (isInvoiceUnitPriceField(dtlField)) { + invoiceUnitPriceCols.add(j); + } else if (isInvoiceTotalPriceField(dtlField)) { + invoiceTotalPriceCols.add(j); + } + } + } Matcher matcherHdr = PATTERN_HDR_FIELD.matcher(cellValue); String result = c.getStringCellValue(); boolean hasHeaderPlaceholder = false; @@ -476,7 +493,11 @@ public class ExcelTemplateALPHA { // 设置千分位格式(根据单元格实际小数位动态决定格式) DataFormat dataFormat = workbook.createDataFormat(); String numFmt; - if (c7.getCellType() == CellType.NUMERIC) { + if (fixedInvoicePriceScale && invoiceUnitPriceCols.contains(i)) { + numFmt = "#,##0.00000"; + } else if (fixedInvoicePriceScale && invoiceTotalPriceCols.contains(i)) { + numFmt = "#,##0.00"; + } else if (c7.getCellType() == CellType.NUMERIC) { numFmt = buildDecimalFormat(c7.getNumericCellValue()); } else { numFmt = "#,##0.00"; @@ -854,6 +875,14 @@ public class ExcelTemplateALPHA { cell.setCellValue(richText); } + private boolean isInvoiceUnitPriceField(String field) { + return "unitPrice".equalsIgnoreCase(field) || "tp".equalsIgnoreCase(field); + } + + private boolean isInvoiceTotalPriceField(String field) { + return "totalPrice".equalsIgnoreCase(field) || "ttl_amount".equalsIgnoreCase(field); + } + private BigDecimal parseNumericString(String value) { if (value == null) { return null; diff --git a/src/main/java/com/xujie/sys/common/utils/ExcelTemplateTX.java b/src/main/java/com/xujie/sys/common/utils/ExcelTemplateTX.java index 2fcf6326..c1327d37 100644 --- a/src/main/java/com/xujie/sys/common/utils/ExcelTemplateTX.java +++ b/src/main/java/com/xujie/sys/common/utils/ExcelTemplateTX.java @@ -46,6 +46,9 @@ public class ExcelTemplateTX { // 价格靠右 发票 @Setter private boolean invoiceLie = false; + // 发票价格列是否使用固定小数位(单价5位、总价2位) + @Setter + private boolean fixedInvoicePriceScale = false; // 数字靠右 箱单 @Setter private boolean intRight = false; @@ -142,6 +145,7 @@ public class ExcelTemplateTX { cellStyle2 = false; rangeStyle = false; priceRight = false; + fixedInvoicePriceScale = false; intRight = false; delRight = false; } @@ -291,6 +295,8 @@ public class ExcelTemplateTX { Set dtlRows = new LinkedHashSet<>(); List boxRows = new ArrayList<>(); + Set invoiceUnitPriceCols = new HashSet<>(); + Set invoiceTotalPriceCols = new HashSet<>(); //整体填值 for (int i = 0; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); @@ -310,6 +316,17 @@ public class ExcelTemplateTX { if ("#{cmcInvoice}".equals(cellValue)) { boxRows.add(i); } + if (i == dtlRowIndex) { + Matcher matcherDtlField = PATTERN_DTL_FIELD.matcher(cellValue); + while (matcherDtlField.find()) { + String dtlField = matcherDtlField.group(1); + if (isInvoiceUnitPriceField(dtlField)) { + invoiceUnitPriceCols.add(j); + } else if (isInvoiceTotalPriceField(dtlField)) { + invoiceTotalPriceCols.add(j); + } + } + } Matcher matcherHdr = PATTERN_HDR_FIELD.matcher(cellValue); String result = c.getStringCellValue(); boolean hasHeaderPlaceholder = false; @@ -474,7 +491,11 @@ public class ExcelTemplateTX { // 设置千分位格式(根据单元格实际小数位动态决定格式) DataFormat dataFormat = workbook.createDataFormat(); String numFmt; - if (c7.getCellType() == CellType.NUMERIC) { + if (fixedInvoicePriceScale && invoiceUnitPriceCols.contains(i)) { + numFmt = "#,##0.00000"; + } else if (fixedInvoicePriceScale && invoiceTotalPriceCols.contains(i)) { + numFmt = "#,##0.00"; + } else if (c7.getCellType() == CellType.NUMERIC) { numFmt = buildDecimalFormat(c7.getNumericCellValue()); } else { numFmt = "#,##0.00"; @@ -845,6 +866,14 @@ public class ExcelTemplateTX { cell.setCellValue(richText); } + private boolean isInvoiceUnitPriceField(String field) { + return "unitPrice".equalsIgnoreCase(field) || "tp".equalsIgnoreCase(field); + } + + private boolean isInvoiceTotalPriceField(String field) { + return "totalPrice".equalsIgnoreCase(field) || "ttl_amount".equalsIgnoreCase(field); + } + private BigDecimal parseNumericString(String value) { if (value == null) { return null; diff --git a/src/main/java/com/xujie/sys/common/utils/ExcelTemplateYB.java b/src/main/java/com/xujie/sys/common/utils/ExcelTemplateYB.java index 3edf4832..a02c503b 100644 --- a/src/main/java/com/xujie/sys/common/utils/ExcelTemplateYB.java +++ b/src/main/java/com/xujie/sys/common/utils/ExcelTemplateYB.java @@ -46,6 +46,9 @@ public class ExcelTemplateYB { // 价格靠右 发票 @Setter private boolean invoiceLie = false; + // 发票价格列是否使用固定小数位(单价5位、总价2位) + @Setter + private boolean fixedInvoicePriceScale = false; // 数字靠右 箱单 @Setter private boolean intRight = false; @@ -142,6 +145,7 @@ public class ExcelTemplateYB { cellStyle2 = false; rangeStyle = false; priceRight = false; + fixedInvoicePriceScale = false; intRight = false; delRight = false; } @@ -292,6 +296,8 @@ public class ExcelTemplateYB { Set dtlRows = new LinkedHashSet<>(); List boxRows = new ArrayList<>(); Set poNoCols = new HashSet<>(); + Set invoiceUnitPriceCols = new HashSet<>(); + Set invoiceTotalPriceCols = new HashSet<>(); //整体填值 for (int i = 0; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); @@ -315,6 +321,17 @@ public class ExcelTemplateYB { if (i == dtlRowIndex && "#{po_no}".equalsIgnoreCase(cellValue)) { poNoCols.add(j); } + if (i == dtlRowIndex) { + Matcher matcherDtlField = PATTERN_DTL_FIELD.matcher(cellValue); + while (matcherDtlField.find()) { + String dtlField = matcherDtlField.group(1); + if (isInvoiceUnitPriceField(dtlField)) { + invoiceUnitPriceCols.add(j); + } else if (isInvoiceTotalPriceField(dtlField)) { + invoiceTotalPriceCols.add(j); + } + } + } Matcher matcherHdr = PATTERN_HDR_FIELD.matcher(cellValue); String result = c.getStringCellValue(); boolean hasHeaderPlaceholder = false; @@ -478,7 +495,11 @@ public class ExcelTemplateYB { // 设置千分位格式(根据单元格实际小数位动态决定格式) DataFormat dataFormat = workbook.createDataFormat(); String numFmt; - if (c7.getCellType() == CellType.NUMERIC) { + if (fixedInvoicePriceScale && invoiceUnitPriceCols.contains(i)) { + numFmt = "#,##0.00000"; + } else if (fixedInvoicePriceScale && invoiceTotalPriceCols.contains(i)) { + numFmt = "#,##0.00"; + } else if (c7.getCellType() == CellType.NUMERIC) { numFmt = buildDecimalFormat(c7.getNumericCellValue()); } else { numFmt = "#,##0.00"; @@ -856,6 +877,14 @@ public class ExcelTemplateYB { cell.setCellValue(richText); } + private boolean isInvoiceUnitPriceField(String field) { + return "unitPrice".equalsIgnoreCase(field) || "tp".equalsIgnoreCase(field); + } + + private boolean isInvoiceTotalPriceField(String field) { + return "totalPrice".equalsIgnoreCase(field) || "ttl_amount".equalsIgnoreCase(field); + } + private BigDecimal parseNumericString(String value) { if (value == null) { return null; diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java index 82e3e0e2..94628467 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java @@ -1093,6 +1093,8 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { void setInvoiceLie(boolean invoiceLie); + void setFixedInvoicePriceScale(boolean fixedInvoicePriceScale); + void addVar(String key, Object value); void addListVarAll(Collection rows); @@ -1147,6 +1149,11 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { delegate.setInvoiceLie(invoiceLie); } + @Override + public void setFixedInvoicePriceScale(boolean fixedInvoicePriceScale) { + delegate.setFixedInvoicePriceScale(fixedInvoicePriceScale); + } + @Override public void addVar(String key, Object value) { delegate.addVar(key, value); @@ -1210,6 +1217,11 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { delegate.setInvoiceLie(invoiceLie); } + @Override + public void setFixedInvoicePriceScale(boolean fixedInvoicePriceScale) { + delegate.setFixedInvoicePriceScale(fixedInvoicePriceScale); + } + @Override public void addVar(String key, Object value) { delegate.addVar(key, value); @@ -1273,6 +1285,11 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { delegate.setInvoiceLie(invoiceLie); } + @Override + public void setFixedInvoicePriceScale(boolean fixedInvoicePriceScale) { + delegate.setFixedInvoicePriceScale(fixedInvoicePriceScale); + } + @Override public void addVar(String key, Object value) { delegate.addVar(key, value); @@ -1840,7 +1857,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { ecHeader.getPriceInfluenceConfirm().equals("Y") ? "是" : "否"); template.addVar("royaltyPaymentsConfirm", StringUtils.isEmpty(ecHeader.getRoyaltyPaymentsConfirm()) ? "" : ecHeader.getRoyaltyPaymentsConfirm().equals("Y") ? "是" : "否"); - template.addVar("remark", stringInput(ecHeader.getRemark())); + template.addVar("remark", stringInput(ecHeader.getRemark())+data.getVoyage()); List detailList = coDelMapper.exportDeclarationDetailTX(data); for (int i = 0; i < detailList.size(); i++) { @@ -2064,6 +2081,8 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { template.setPriceRight(true); template.setMoveSeal(true); template.setInvoiceLie(data.getShowWeight() != null && data.getShowWeight()); + String invoiceBuNo = notifyHeader == null ? "" : notifyHeader.getBuNo(); + template.setFixedInvoicePriceScale("02-Hardtag".equalsIgnoreCase(invoiceBuNo) || "05-Alpha".equalsIgnoreCase(invoiceBuNo)); template.addVar("remark", stringInput(data.getFpremark())); template.addVar("localShipper", notifyHeader.getCustomerName()); template.addVar("localShipAddress", notifyHeader.getLocalShipAddress()); @@ -3061,6 +3080,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { template.addVar("contacts", ecssContacts.get(0).get("name")+(ecssContacts.size()>1?"/"+ecssContacts.get(1).get("name"):"")); } template.addVar("voyage", resolveExportGoodsVoyage(data, notifyHeader, nodifyDetailList));//唛头 + template.addVar("poNos", formatPoNoForHwDesc(poNoSet)); } private String getContactField(List contacts, String field) { diff --git a/src/main/resources/templates/TX/declaration-all-template.xlsx b/src/main/resources/templates/TX/declaration-all-template.xlsx index 8203c556..9d687fe2 100644 Binary files a/src/main/resources/templates/TX/declaration-all-template.xlsx and b/src/main/resources/templates/TX/declaration-all-template.xlsx differ diff --git a/src/main/resources/templates/TX/declaration-template.xlsx b/src/main/resources/templates/TX/declaration-template.xlsx index 31e2e14f..206930b0 100644 Binary files a/src/main/resources/templates/TX/declaration-template.xlsx and b/src/main/resources/templates/TX/declaration-template.xlsx differ diff --git a/src/main/resources/templates/TX/export-goods-template.xlsx b/src/main/resources/templates/TX/export-goods-template.xlsx index 9fa566a5..f1452971 100644 Binary files a/src/main/resources/templates/TX/export-goods-template.xlsx and b/src/main/resources/templates/TX/export-goods-template.xlsx differ