| | |
| | | sheet.setColumnWidth(3, 2500); |
| | | sheet.setColumnWidth(4, 3000); |
| | | sheet.setColumnWidth(5, 4500); |
| | | sheet.setColumnWidth(6, 3500); |
| | | sheet.setColumnWidth(6, 2000); |
| | | |
| | | CellStyle companyTitle = createBaseStyle(workbook, "宋体", (short) 20, true, true); |
| | | CellStyle billTitle = createBaseStyle(workbook, "宋体", (short) 18, true, true); |
| | | CellStyle headerStyle = createBorderStyle(workbook, "宋体", (short) 12, true, true); |
| | | CellStyle dataCenterStyle = createBorderStyle(workbook, "宋体", (short) 11, false, true); |
| | | CellStyle noBorder = createNoBorderStyle(workbook); |
| | | |
| | | // 样式1:带虚线 + 居中 |
| | | CellStyle dashStyle = createDashBottomStyle(workbook); |
| | | dashStyle.setAlignment(HorizontalAlignment.CENTER); |
| | | dashStyle.setVerticalAlignment(VerticalAlignment.CENTER); |
| | | |
| | | // 样式2:无边框 + 居中(给仓库用) |
| | | CellStyle centerNoBorder = createNoBorderStyle(workbook); |
| | | centerNoBorder.setAlignment(HorizontalAlignment.CENTER); |
| | | centerNoBorder.setVerticalAlignment(VerticalAlignment.CENTER); |
| | | |
| | | // 标题 |
| | | Row row0 = sheet.createRow(0); |
| | |
| | | Row row7 = sheet.createRow(7); |
| | | row7.createCell(0).setCellValue("货物详细信息:"); |
| | | |
| | | // 表头:共四联 + 虚线 |
| | | int tableStart = 8; |
| | | Row headerRow = sheet.createRow(tableStart); |
| | | String[] headers = {"序号", "物料编号", "品名/规格", "单位", "数量", "订单号", "共四联"}; |
| | |
| | | } |
| | | } |
| | | |
| | | // 查询当前单据所有产品 |
| | | // 查询产品 |
| | | SalesLedgerProduct cond = new SalesLedgerProduct(); |
| | | cond.setSalesLedgerId(ledger.getId()); |
| | | List<SalesLedgerProduct> productList = salesLedgerProductServiceImpl.selectSalesLedgerProductList(cond); |
| | | |
| | | BigDecimal totalQuantity = BigDecimal.ZERO; |
| | | for (SalesLedgerProduct p : productList) { |
| | | if (p.getQuantity() != null) { |
| | | totalQuantity = totalQuantity.add(p.getQuantity()); |
| | | } |
| | | if (p.getQuantity() != null) totalQuantity = totalQuantity.add(p.getQuantity()); |
| | | } |
| | | |
| | | int currentRow = tableStart + 1; |
| | | String[] fourNames = {"存根", "回单", "客户", "仓库"}; |
| | | |
| | | // ===================== 1. 先渲染所有产品 ===================== |
| | | // 1. 所有产品 |
| | | for (int i = 0; i < productList.size(); i++) { |
| | | SalesLedgerProduct p = productList.get(i); |
| | | Row dataRow = sheet.createRow(currentRow++); |
| | |
| | | if (i <= 2) { |
| | | fourCell.setCellStyle(dashStyle); |
| | | } else { |
| | | fourCell.setCellStyle(noBorder); |
| | | fourCell.setCellStyle(centerNoBorder); |
| | | } |
| | | } else { |
| | | fourCell.setCellStyle(noBorder); |
| | | fourCell.setCellStyle(centerNoBorder); |
| | | } |
| | | } |
| | | |
| | | // ===================== 2. 不足6行 → 补空行 ===================== |
| | | // 2. 不足6行补空 |
| | | int minRow = 6; |
| | | int needEmpty = Math.max(0, minRow - productList.size()); |
| | | for (int i = 0; i < needEmpty; i++) { |
| | | int seq = productList.size() + i; |
| | | Row dataRow = sheet.createRow(currentRow++); |
| | | |
| | | for (int c = 0; c <= 5; c++) { |
| | | dataRow.createCell(c).setCellStyle(dataCenterStyle); |
| | | } |
| | | for (int c = 0; c <= 5; c++) dataRow.createCell(c).setCellStyle(dataCenterStyle); |
| | | |
| | | Cell fourCell = dataRow.createCell(6); |
| | | if (seq < fourNames.length) { |
| | |
| | | if (seq <= 2) { |
| | | fourCell.setCellStyle(dashStyle); |
| | | } else { |
| | | fourCell.setCellStyle(noBorder); |
| | | fourCell.setCellStyle(centerNoBorder); |
| | | } |
| | | } else { |
| | | fourCell.setCellStyle(noBorder); |
| | | fourCell.setCellStyle(centerNoBorder); |
| | | } |
| | | } |
| | | |
| | | // 合计行 |
| | | // 合计 |
| | | Row totalRow = sheet.createRow(currentRow); |
| | | sheet.addMergedRegion(new CellRangeAddress(currentRow, currentRow, 0, 3)); |
| | | totalRow.createCell(0).setCellValue("合计"); |
| | | totalRow.createCell(4).setCellValue(totalQuantity.doubleValue()); |
| | | fillMergeRange(sheet, currentRow, currentRow, 0, 5, dataCenterStyle); |
| | | totalRow.createCell(6).setCellStyle(noBorder); |
| | | totalRow.createCell(6).setCellStyle(centerNoBorder); |
| | | |
| | | // 备注 |
| | | currentRow++; |