diff --git a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java index 6e519594..b929c680 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java +++ b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java @@ -551,12 +551,12 @@ public class CoDelController { private boolean isTX(String buNo, String site, String delNo) { if (org.apache.commons.lang.StringUtils.isNotBlank(buNo)) { - return "02-Hardtag".equals(buNo) || "04-MHM".equals(buNo); + return !"03-RFID".equals(buNo) && !"01-Label".equals(buNo); } if (org.apache.commons.lang.StringUtils.isNotBlank(site) && org.apache.commons.lang.StringUtils.isNotBlank(delNo)) { EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(site, delNo); if (notifyHeader != null && org.apache.commons.lang.StringUtils.isNotBlank(notifyHeader.getBuNo())) { - return "02-Hardtag".equals(notifyHeader.getBuNo()) || "04-MHM".equals(notifyHeader.getBuNo()); + return !"03-RFID".equals(notifyHeader.getBuNo()) && !"01-Label".equals(notifyHeader.getBuNo()); } } return false; diff --git a/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java b/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java index 19df4a2e..3fdea00b 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java +++ b/src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java @@ -194,6 +194,8 @@ public interface CoDelMapper { List exportDeclarationDetail(EcssDeclarationHeaderData data); + List exportDeclarationDetailTX(EcssDeclarationHeaderData data); + EcssCoDelNotifyHeaderData getEcssCoDelNotifyHeader(@Param("site") String site,@Param("delNo") String delNo); List exportEcssCoDelNotifyDetail(EcssDeclarationHeaderData data); 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 2fb91816..c7381b28 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 @@ -475,6 +475,8 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { hsCodeData.setHsCode(hsCode); hsCodeData.setCreateBy(data.getUsername()); hsCodeData.setUnit(partData.getUmid()); + // 根据BU赋值不同的codeNo + hsCodeData.setCodeNo("02-Hardtag".equals(data.getBuNo())?"HT001":"04-MHM".equals(data.getBuNo())?"MHM001":""); coDelMapper.insertHsCodeData(hsCodeData); } } @@ -842,7 +844,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { public void downloadDeclarationElements(HttpServletResponse response, EcssDeclarationHeaderData data) { try { ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource("templates/TX/declaration-elements-template.xlsx").getInputStream()); - extractedElements(data, template); + extractedElements(data, new TxExcelTemplateAdapter(template)); try (XSSFWorkbook workbook = template.render(0)) { workbook.write(response.getOutputStream()); } @@ -862,7 +864,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { public void downloadDeclaration(HttpServletResponse response, EcssDeclarationHeaderData data) { try { ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource("templates/TX/declaration-template.xlsx").getInputStream()); - extractedDeclaration(data, template); + extractedDeclaration(data, new TxExcelTemplateAdapter(template)); try (XSSFWorkbook workbook = template.render(0)) { workbook.write(response.getOutputStream()); } @@ -883,6 +885,159 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { return inString; } } + + /** + * 统一封装 TX/YB 模版的通用能力,避免业务方法拆成两套实现。 + */ + private interface ExcelTemplateAdapter { + void clearAll(); + + void setMoveSeal(boolean moveSeal); + + void setDelRight(boolean delRight); + + void setMoveShape(boolean moveShape); + + void setCellStyle(boolean cellStyle); + + void setRangeStyle(boolean rangeStyle); + + void setPriceRight(boolean priceRight); + + void setInvoiceLie(boolean invoiceLie); + + void addVar(String key, Object value); + + void addListVarAll(Collection rows); + + void setRowHeight(int startListIndex, int endListIndex, int height); + } + + private static class TxExcelTemplateAdapter implements ExcelTemplateAdapter { + private final ExcelTemplateTX delegate; + + private TxExcelTemplateAdapter(ExcelTemplateTX delegate) { + this.delegate = delegate; + } + + @Override + public void clearAll() { + delegate.clearAll(); + } + + @Override + public void setMoveSeal(boolean moveSeal) { + delegate.setMoveSeal(moveSeal); + } + + @Override + public void setDelRight(boolean delRight) { + delegate.setDelRight(delRight); + } + + @Override + public void setMoveShape(boolean moveShape) { + delegate.setMoveShape(moveShape); + } + + @Override + public void setCellStyle(boolean cellStyle) { + delegate.setCellStyle(cellStyle); + } + + @Override + public void setRangeStyle(boolean rangeStyle) { + delegate.setRangeStyle(rangeStyle); + } + + @Override + public void setPriceRight(boolean priceRight) { + delegate.setPriceRight(priceRight); + } + + @Override + public void setInvoiceLie(boolean invoiceLie) { + delegate.setInvoiceLie(invoiceLie); + } + + @Override + public void addVar(String key, Object value) { + delegate.addVar(key, value); + } + + @Override + public void addListVarAll(Collection rows) { + delegate.addListVarAll(rows); + } + + @Override + public void setRowHeight(int startListIndex, int endListIndex, int height) { + delegate.setRowHeight(startListIndex, endListIndex, height); + } + } + + private static class YbExcelTemplateAdapter implements ExcelTemplateAdapter { + private final ExcelTemplateYB delegate; + + private YbExcelTemplateAdapter(ExcelTemplateYB delegate) { + this.delegate = delegate; + } + + @Override + public void clearAll() { + delegate.clearAll(); + } + + @Override + public void setMoveSeal(boolean moveSeal) { + delegate.setMoveSeal(moveSeal); + } + + @Override + public void setDelRight(boolean delRight) { + delegate.setDelRight(delRight); + } + + @Override + public void setMoveShape(boolean moveShape) { + delegate.setMoveShape(moveShape); + } + + @Override + public void setCellStyle(boolean cellStyle) { + delegate.setCellStyle(cellStyle); + } + + @Override + public void setRangeStyle(boolean rangeStyle) { + delegate.setRangeStyle(rangeStyle); + } + + @Override + public void setPriceRight(boolean priceRight) { + delegate.setPriceRight(priceRight); + } + + @Override + public void setInvoiceLie(boolean invoiceLie) { + delegate.setInvoiceLie(invoiceLie); + } + + @Override + public void addVar(String key, Object value) { + delegate.addVar(key, value); + } + + @Override + public void addListVarAll(Collection rows) { + delegate.addListVarAll(rows); + } + + @Override + public void setRowHeight(int startListIndex, int endListIndex, int height) { + delegate.setRowHeight(startListIndex, endListIndex, height); + } + } /** * 导出发票 */ @@ -893,7 +1048,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { // 硬标天线需要po(declaration-invoice2-template.xlsx),且要长 String xlsx = "templates/TX/declaration-invoice2-template.xlsx"; ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource(xlsx).getInputStream()); - extractedInvoice(data, template, notifyHeader); + extractedInvoice(data, new TxExcelTemplateAdapter(template), notifyHeader); try (XSSFWorkbook workbook = template.render(0)) { workbook.write(response.getOutputStream()); } @@ -1010,7 +1165,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { public void downloadExportGoods(HttpServletResponse response, EcssDeclarationHeaderData data) { try { ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource("templates/TX/export-goods-template.xlsx").getInputStream()); - extractedExportGoods(data, template); + extractedExportGoods(data, new TxExcelTemplateAdapter(template)); try (XSSFWorkbook workbook = template.render(0)) { workbook.write(response.getOutputStream()); } @@ -1031,7 +1186,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { public void downloadContract(HttpServletResponse response, EcssDeclarationHeaderData data) { try { ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource("templates/TX/declaration-contract-template.xlsx").getInputStream()); - extractedContract(data, template); + extractedContract(data, new TxExcelTemplateAdapter(template)); try (XSSFWorkbook workbook = template.render(0)) { workbook.write(response.getOutputStream()); } @@ -1048,40 +1203,72 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { @Override public void downloadAll(HttpServletResponse response, EcssDeclarationHeaderData data) { EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(data.getSite(), data.getDelNo()); - // RFID和RF和硬标天线使用的模版不一样 - // RFID和RF如果勾选了合同,导出需要带公章(declaration-all-seal-template.xlsx) - String xlsx = "templates/TX/declaration-all-template.xlsx"; XSSFWorkbook workbook = null; try { - ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource(xlsx).getInputStream()); + boolean isMhm = notifyHeader != null && "04-MHM".equalsIgnoreCase(notifyHeader.getBuNo()); + if (isMhm) { + ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource("templates/TX/declaration-all-template.xlsx").getInputStream()); + ExcelTemplateAdapter templateAdapter = new TxExcelTemplateAdapter(template); + + // 第一个sheet - 出口货物委托书 + extractedExportGoods(data, templateAdapter); + workbook = template.render(0); + + // 第二个sheet - 发票 + templateAdapter.clearAll(); + extractedInvoice(data, templateAdapter, notifyHeader); + template.render(1); + + // 第三个sheet - 箱单 + templateAdapter.clearAll(); + exportPackingList(data, template, notifyHeader, 0); + template.render(2); + + // 第四个sheet - 报关单 + templateAdapter.clearAll(); + extractedDeclaration(data, templateAdapter); + template.render(3); + + // 第五个sheet - 申报要素 + templateAdapter.clearAll(); + extractedElements(data, templateAdapter); + template.render(4); + // 第六个sheet - 合同 + templateAdapter.clearAll(); + extractedContract(data, templateAdapter); + template.render(5); + } else { + ExcelTemplateYB template = ExcelTemplateYB.load(new ClassPathResource("templates/YB/declaration-all-template.xlsx").getInputStream()); + ExcelTemplateAdapter templateAdapter = new YbExcelTemplateAdapter(template); + + // 第一个sheet - 出口货物委托书 + extractedExportGoods(data, templateAdapter); + workbook = template.render(0); - // 第一个sheet - 出口货物委托书 - extractedExportGoods(data, template); - workbook = template.render(0); - - // 第二个sheet - 发票 - template.clearAll(); - extractedInvoice(data, template, notifyHeader); - template.render(1); - - // 第三个sheet - 箱单 - template.clearAll(); - exportPackingList(data, template, notifyHeader, 0); - template.render(2); - - // 第四个sheet - 报关单 - template.clearAll(); - extractedDeclaration(data, template); - template.render(3); - - // 第五个sheet - 申报要素 - template.clearAll(); - extractedElements(data, template); - template.render(4); - // 第六个sheet - 合同 - template.clearAll(); - extractedContract(data, template); - template.render(5); + // 第二个sheet - 发票 + templateAdapter.clearAll(); + extractedInvoice(data, templateAdapter, notifyHeader); + template.render(1); + + // 第三个sheet - 箱单 + templateAdapter.clearAll(); + exportPackingListYB(data, template, notifyHeader, 0); + template.render(2); + + // 第四个sheet - 报关单 + templateAdapter.clearAll(); + extractedDeclaration(data, templateAdapter); + template.render(3); + + // 第五个sheet - 申报要素 + templateAdapter.clearAll(); + extractedElements(data, templateAdapter); + template.render(4); + // 第六个sheet - 合同 + templateAdapter.clearAll(); + extractedContract(data, templateAdapter); + template.render(5); + } response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename=\"danzheng.xlsx\""); @@ -1109,37 +1296,66 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { @Override public void downloadAllPdf(HttpServletResponse response, EcssDeclarationHeaderData data) { EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(data.getSite(), data.getDelNo()); - // RFID和RF和硬标天线使用的模版不一样 - // RFID和RF如果勾选了合同,导出需要带公章(declaration-all-seal-template.xlsx) - String xlsx = "templates/TX/declaration-all-template-pdf.xlsx"; XSSFWorkbook excelWorkbook = null; try { - ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource(xlsx).getInputStream()); + boolean isMhm = notifyHeader != null && "04-MHM".equalsIgnoreCase(notifyHeader.getBuNo()); + if (isMhm) { + String xlsx = "templates/TX/declaration-all-template-pdf.xlsx"; + ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource(xlsx).getInputStream()); + ExcelTemplateAdapter templateAdapter = new TxExcelTemplateAdapter(template); + + // 第一个sheet - 发票(PDF导出时跳过出口货物委托书) + extractedInvoice(data, templateAdapter, notifyHeader); + excelWorkbook = template.render(0); - // 第一个sheet - 发票(PDF导出时跳过出口货物委托书) - extractedInvoice(data, template, notifyHeader); - excelWorkbook = template.render(0); + // 第二个sheet - 箱单 + templateAdapter.clearAll(); + exportPackingList(data, template, notifyHeader, 0); + template.render(1); + + // 第三个sheet - 报关单 + templateAdapter.clearAll(); + extractedDeclaration(data, templateAdapter); + template.render(2); + + // 第四个sheet - 申报要素 + templateAdapter.clearAll(); + extractedElements(data, templateAdapter); + template.render(3); + + // 第五个sheet - 合同 + templateAdapter.clearAll(); + extractedContract(data, templateAdapter); + template.render(4); + } else { + String xlsx = "templates/YB/declaration-all-template-pdf.xlsx"; + ExcelTemplateYB template = ExcelTemplateYB.load(new ClassPathResource(xlsx).getInputStream()); + ExcelTemplateAdapter templateAdapter = new YbExcelTemplateAdapter(template); - // 第二个sheet - 箱单 - template.clearAll(); - exportPackingList(data, template, notifyHeader, 0); - template.render(1); + // 第一个sheet - 发票(PDF导出时跳过出口货物委托书) + extractedInvoice(data, templateAdapter, notifyHeader); + excelWorkbook = template.render(0); - // 第三个sheet - 报关单 - template.clearAll(); - extractedDeclaration(data, template); - template.render(2); + // 第二个sheet - 箱单 + templateAdapter.clearAll(); + exportPackingListYB(data, template, notifyHeader, 0); + template.render(1); - // 第四个sheet - 申报要素 - template.clearAll(); - extractedElements(data, template); - template.render(3); + // 第三个sheet - 报关单 + templateAdapter.clearAll(); + extractedDeclaration(data, templateAdapter); + template.render(2); + // 第四个sheet - 申报要素 + templateAdapter.clearAll(); + extractedElements(data, templateAdapter); + template.render(3); - // 第五个sheet - 合同 - template.clearAll(); - extractedContract(data, template); - template.render(4); + // 第五个sheet - 合同 + templateAdapter.clearAll(); + extractedContract(data, templateAdapter); + template.render(4); + } // 将Excel转换为PDF byte[] pdfBytes = convertExcelToPdf(excelWorkbook); @@ -1221,7 +1437,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { return pdfBytes; } - private void extractedDeclaration(EcssDeclarationHeaderData data, ExcelTemplateTX template) { + private void extractedDeclaration(EcssDeclarationHeaderData data, ExcelTemplateAdapter template) { template.setMoveSeal(true); template.setDelRight(true); EcssDeclarationHeaderData ecHeader = coDelMapper.getDeclarationHeader(data); @@ -1288,7 +1504,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { ecHeader.getRoyaltyPaymentsConfirm().equals("Y") ? "是" : "否"); template.addVar("remark", stringInput(ecHeader.getRemark())); - List detailList = coDelMapper.exportDeclarationDetail(data); + List detailList = coDelMapper.exportDeclarationDetailTX(data); for (int i = 0; i < detailList.size(); i++) { Map eorder = detailList.get(i); eorder.put("row_num", i + 1); @@ -1311,7 +1527,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { template.addListVarAll(detailList); } - private void extractedElements(EcssDeclarationHeaderData data, ExcelTemplateTX template) { + private void extractedElements(EcssDeclarationHeaderData data, ExcelTemplateAdapter template) { template.addVar("brandType", data.getBrandType()); Map propertiesMap = new HashMap<>(); if (data.getPropertiesList()!=null && !data.getPropertiesList().isEmpty()) { @@ -1422,7 +1638,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { return result.toString(); } - private void extractedInvoice(EcssDeclarationHeaderData data, ExcelTemplateTX template, + private void extractedInvoice(EcssDeclarationHeaderData data, ExcelTemplateAdapter template, EcssCoDelNotifyHeaderData notifyHeader) { List notifyDetailList = data.getNotifyPartDetailList(); for (EcssCoDelNotifyDetailData nData:notifyDetailList){ @@ -1777,6 +1993,14 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { template.addListVarAll(exportList); } + /** + * YB装箱单导出,逻辑与TX基本一致,区别在于YB的装箱单模板与TX不同,部分字段需要特殊处理 + * 第一列展示托号(pallet_no) + * @param data + * @param template + * @param notifyHeader + * @param type + */ private void exportPackingListYB(EcssDeclarationHeaderData data, ExcelTemplateYB template, EcssCoDelNotifyHeaderData notifyHeader,int type) { List notifyDetailList; @@ -2018,7 +2242,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { template.addListVarAll(exportList); } - private void extractedExportGoods(EcssDeclarationHeaderData data, ExcelTemplateTX template) { + private void extractedExportGoods(EcssDeclarationHeaderData data, ExcelTemplateAdapter template) { EcssDeclarationHeaderData ecHeader = coDelMapper.getDeclarationHeaderByDelNo(data); // 发货通知单 EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(data.getSite(), data.getDelNo()); @@ -2146,7 +2370,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { } } - private void extractedContract(EcssDeclarationHeaderData data, ExcelTemplateTX template) { + private void extractedContract(EcssDeclarationHeaderData data, ExcelTemplateAdapter template) { // 发货通知单 EcssCoDelNotifyHeaderData notifyHeader = coDelMapper.getEcssCoDelNotifyHeader(data.getSite(), data.getDelNo()); template.addVar("cmcInvoice", notifyHeader.getCmcInvoice()); diff --git a/src/main/resources/mapper/ecss/CoDelMapper.xml b/src/main/resources/mapper/ecss/CoDelMapper.xml index 1afd6768..026b33cf 100644 --- a/src/main/resources/mapper/ecss/CoDelMapper.xml +++ b/src/main/resources/mapper/ecss/CoDelMapper.xml @@ -898,6 +898,17 @@ left join ecss_CoDelNotifyHeader noHeader on a.site=noHeader.site and a.delNo=no where detail.site=#{site} and declaration_no=#{declarationNo} + +