Browse Source

RFID、天线、硬标分别使用不同的ExcelTemplate工具类

ecss-tx
han\hanst 2 months ago
parent
commit
e929d84285
  1. 4
      src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java
  2. 2
      src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java
  3. 354
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelTXServiceImpl.java
  4. 11
      src/main/resources/mapper/ecss/CoDelMapper.xml

4
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;

2
src/main/java/com/xujie/sys/modules/ecss/mapper/CoDelMapper.java

@ -194,6 +194,8 @@ public interface CoDelMapper {
List<Map> exportDeclarationDetail(EcssDeclarationHeaderData data);
List<Map> exportDeclarationDetailTX(EcssDeclarationHeaderData data);
EcssCoDelNotifyHeaderData getEcssCoDelNotifyHeader(@Param("site") String site,@Param("delNo") String delNo);
List<Map> exportEcssCoDelNotifyDetail(EcssDeclarationHeaderData data);

354
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<Map> detailList = coDelMapper.exportDeclarationDetail(data);
List<Map> 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<String, String> 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<EcssCoDelNotifyDetailData> 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<EcssCoDelNotifyDetailData> 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());

11
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}
</select>
<select id="exportDeclarationDetailTX" resultType="java.util.Map">
select detail.site,detail.declaration_no,detail.item_no,
CONVERT(DECIMAL(20, 6), detail.qty) as qty,isnull(h.unit,'') as qty_unit,'kg' as weight_unit,
CONVERT(DECIMAL(20, 2),detail.net_weight) as net_weight,CONVERT(DECIMAL(20, 6),detail.unit_price) as unit_price,
CONVERT(DECIMAL(20, 2),detail.total_price) as total_price,detail.currency,detail.made_area,detail.destination,
detail.source_area,detail.levy,detail.hs_code,detail.hs_code_desc,h.hsCodeDescEn
from ecss_declaration_detail detail
left join ecss_hsCode h on detail.hs_code=h.HsCode and detail.site=h.Site and detail.hs_code_desc=h.hsCodeDesc and detail.brand=h.brand
where detail.site=#{site} and declaration_no=#{declarationNo}
</select>
<select id="getEcssCoDelNotifyHeader" resultType="EcssCoDelNotifyHeaderData">
select * from ecss_CoDelNotifyHeader where site=#{site} and delNo=#{delNo}
</select>

Loading…
Cancel
Save