|
|
|
@ -1285,95 +1285,77 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
ExcelTemplateTX template = ExcelTemplateTX.load(new ClassPathResource("templates/TX/declaration-all-template.xlsx").getInputStream()); |
|
|
|
ExcelTemplateAdapter templateAdapter = new TxExcelTemplateAdapter(template); |
|
|
|
|
|
|
|
// 第一个sheet - 出口货物委托书 |
|
|
|
extractedExportGoods(data, templateAdapter); |
|
|
|
// 第1个sheet - 发票 |
|
|
|
extractedInvoice(data, templateAdapter, notifyHeader); |
|
|
|
workbook = template.render(0); |
|
|
|
|
|
|
|
// 第二个sheet - 发票 |
|
|
|
// 第2个sheet - 箱单 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedInvoice(data, templateAdapter, notifyHeader); |
|
|
|
exportPackingList(data, template, notifyHeader, 0); |
|
|
|
template.render(1); |
|
|
|
|
|
|
|
// 第三个sheet - 箱单 |
|
|
|
// 第3个sheet - 报关单 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
exportPackingList(data, template, notifyHeader, 0); |
|
|
|
extractedDeclaration(data, templateAdapter); |
|
|
|
template.render(2); |
|
|
|
|
|
|
|
// 第四个sheet - 报关单 |
|
|
|
// 第4个sheet - 申报要素 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedDeclaration(data, templateAdapter); |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
template.render(3); |
|
|
|
|
|
|
|
// 第五个sheet - 申报要素 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
template.render(4); |
|
|
|
// 第六个sheet - 合同 |
|
|
|
/*templateAdapter.clearAll(); |
|
|
|
extractedContract(data, templateAdapter); |
|
|
|
template.render(5);*/ |
|
|
|
} else if (isHardtag) { |
|
|
|
ExcelTemplateYB template = ExcelTemplateYB.load(new ClassPathResource("templates/YB/declaration-all-template.xlsx").getInputStream()); |
|
|
|
ExcelTemplateAdapter templateAdapter = new Yb2ExcelTemplateAdapter(template); |
|
|
|
|
|
|
|
// 第一个sheet - 出口货物委托书 |
|
|
|
extractedExportGoods(data, templateAdapter); |
|
|
|
// 第1个sheet - 发票 |
|
|
|
extractedInvoice(data, templateAdapter, notifyHeader); |
|
|
|
workbook = template.render(0); |
|
|
|
|
|
|
|
// 第二个sheet - 发票 |
|
|
|
// 第2个sheet - 箱单 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedInvoice(data, templateAdapter, notifyHeader); |
|
|
|
exportPackingListYB(data, template, notifyHeader, 0); |
|
|
|
template.render(1); |
|
|
|
|
|
|
|
// 第三个sheet - 箱单 |
|
|
|
// 第3个sheet - 报关单 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
exportPackingListYB(data, template, notifyHeader, 0); |
|
|
|
extractedDeclaration(data, templateAdapter); |
|
|
|
template.render(2); |
|
|
|
|
|
|
|
// 第四个sheet - 报关单 |
|
|
|
// 第4个sheet - 申报要素 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedDeclaration(data, templateAdapter); |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
template.render(3); |
|
|
|
|
|
|
|
// 第五个sheet - 申报要素 |
|
|
|
// 第5个sheet - 合同 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
extractedContract(data, templateAdapter); |
|
|
|
template.render(4); |
|
|
|
// 第六个sheet - 合同 |
|
|
|
// 第6个sheet - 出货通知 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedContract(data, templateAdapter); |
|
|
|
extractedShippingNotice(templateAdapter, notifyHeader); |
|
|
|
template.render(5); |
|
|
|
} else { |
|
|
|
ExcelTemplateALPHA template = ExcelTemplateALPHA.load(new ClassPathResource("templates/ALPHA/declaration-all-template.xlsx").getInputStream()); |
|
|
|
ExcelTemplateAdapter templateAdapter = new YbExcelTemplateAdapter(template); |
|
|
|
|
|
|
|
// 第一个sheet - 出口货物委托书 |
|
|
|
extractedExportGoods(data, templateAdapter); |
|
|
|
workbook = template.render(0); |
|
|
|
|
|
|
|
// 第二个sheet - 发票 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
// 第1个sheet - 发票 |
|
|
|
extractedInvoice(data, templateAdapter, notifyHeader); |
|
|
|
template.render(1); |
|
|
|
workbook = template.render(0); |
|
|
|
|
|
|
|
// 第三个sheet - 箱单 |
|
|
|
// 第2个sheet - 箱单 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
exportPackingListAlpha(data, template, notifyHeader, 0); |
|
|
|
template.render(2); |
|
|
|
template.render(1); |
|
|
|
|
|
|
|
// 第四个sheet - 报关单 |
|
|
|
// 第3个sheet - 报关单 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedDeclaration(data, templateAdapter); |
|
|
|
template.render(3); |
|
|
|
template.render(2); |
|
|
|
|
|
|
|
// 第五个sheet - 申报要素 |
|
|
|
// 第4个sheet - 申报要素 |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
template.render(4); |
|
|
|
// 第六个sheet - 合同 |
|
|
|
/* templateAdapter.clearAll(); |
|
|
|
extractedContract(data, templateAdapter); |
|
|
|
template.render(5);*/ |
|
|
|
template.render(3); |
|
|
|
} |
|
|
|
|
|
|
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); |
|
|
|
@ -1430,10 +1412,6 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
template.render(3); |
|
|
|
|
|
|
|
// 第五个sheet - 合同 |
|
|
|
/* templateAdapter.clearAll(); |
|
|
|
extractedContract(data, templateAdapter); |
|
|
|
template.render(4);*/ |
|
|
|
} else if (isHardtag) { |
|
|
|
String xlsx = "templates/YB/declaration-all-template-pdf.xlsx"; |
|
|
|
ExcelTemplateYB template = ExcelTemplateYB.load(new ClassPathResource(xlsx).getInputStream()); |
|
|
|
@ -1485,11 +1463,6 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
templateAdapter.clearAll(); |
|
|
|
extractedElements(data, templateAdapter); |
|
|
|
template.render(3); |
|
|
|
|
|
|
|
// 第五个sheet - 合同 |
|
|
|
/*templateAdapter.clearAll(); |
|
|
|
extractedContract(data, templateAdapter); |
|
|
|
template.render(4);*/ |
|
|
|
} |
|
|
|
|
|
|
|
// 将Excel转换为PDF |
|
|
|
@ -2008,7 +1981,8 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
|
|
|
|
// 构建artNo内容 |
|
|
|
String artNoContent = eorder.get("pn")+" " + eorder.get("part_description") + "\n" |
|
|
|
+ " PO#" + eorder.get("po_no")+" HS CODE#" + eorder.get("hsCode"); |
|
|
|
+ " PO#" + eorder.get("po_no") + |
|
|
|
(data.getHsCodeFlag()!=null && data.getHsCodeFlag()?" HS CODE#" + eorder.get("hsCode"):""); |
|
|
|
eorder.put("artNo", artNoContent); |
|
|
|
// 计算artNo内容的行数,动态设置行高 |
|
|
|
int lineCount = calculateLineCount(artNoContent); |
|
|
|
@ -2260,7 +2234,8 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
|
|
|
|
// 构建artNo内容 |
|
|
|
String artNoContent = eorder.get("pn")+" " + eorder.get("part_description") + "\n" |
|
|
|
+ " PO#" + eorder.get("po_no")+" HS CODE#" + eorder.get("hsCode"); |
|
|
|
+ " PO#" + eorder.get("po_no") + |
|
|
|
(data.getHsCodeFlag()!=null && data.getHsCodeFlag()?" HS CODE#" + eorder.get("hsCode"):""); |
|
|
|
eorder.put("artNo", artNoContent); |
|
|
|
// 计算artNo内容的行数,动态设置行高 |
|
|
|
int lineCount = calculateLineCount(artNoContent); |
|
|
|
@ -2347,9 +2322,9 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
if (data.getPackaging()!=null && data.getPackaging()) { |
|
|
|
template.addVar("packaging", "Non-Reusable plastic packaging:"); |
|
|
|
// 根据维护参数计算出KGS=总托数*plastic packaging维护参数 |
|
|
|
BigDecimal totalKgs = data.getKgs()!=null?data.getKgs():BigDecimal.ZERO; |
|
|
|
BigDecimal totalKgs = data.getKgs()!=null?data.getKgs():BigDecimal.valueOf(3); |
|
|
|
if (palletHeaderDataList.isEmpty()) { |
|
|
|
totalKgs = BigDecimal.valueOf(0.1); |
|
|
|
totalKgs = BigDecimal.valueOf(3); |
|
|
|
} |
|
|
|
template.addVar("KGS_qty", data.getKgs()!=null?(totalKgs.multiply(BigDecimal.valueOf(totalPlt))).setScale(2, RoundingMode.HALF_UP):""); |
|
|
|
template.addVar("KGS", "KGS"); |
|
|
|
@ -2509,7 +2484,8 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
|
|
|
|
// 构建artNo内容 |
|
|
|
String artNoContent = eorder.get("pn")+" " + eorder.get("part_description") + "\n" |
|
|
|
+ " PO#" + eorder.get("po_no"); |
|
|
|
+ " PO#" + eorder.get("po_no") + |
|
|
|
(data.getHsCodeFlag()!=null && data.getHsCodeFlag()?" HS CODE#" + eorder.get("hsCode"):""); |
|
|
|
eorder.put("artNo", artNoContent); |
|
|
|
// 计算artNo内容的行数,动态设置行高 |
|
|
|
int lineCount = calculateLineCount(artNoContent); |
|
|
|
@ -2600,9 +2576,9 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
if (data.getPackaging()!=null && data.getPackaging()) { |
|
|
|
template.addVar("packaging", "Non-Reusable plastic packaging:"); |
|
|
|
// 根据维护参数计算出KGS=总托数*plastic packaging维护参数 |
|
|
|
BigDecimal totalKgs = data.getKgs()!=null?data.getKgs():BigDecimal.ZERO; |
|
|
|
BigDecimal totalKgs = data.getKgs()!=null?data.getKgs():BigDecimal.valueOf(5.4); |
|
|
|
if (palletHeaderDataList.isEmpty()) { |
|
|
|
totalKgs = BigDecimal.valueOf(0.1); |
|
|
|
totalKgs = BigDecimal.valueOf(5.4); |
|
|
|
} |
|
|
|
template.addVar("KGS_qty", data.getKgs()!=null?(totalKgs.multiply(BigDecimal.valueOf(totalPlt))).setScale(2, RoundingMode.HALF_UP):""); |
|
|
|
template.addVar("KGS", "KGS"); |
|
|
|
@ -2688,15 +2664,15 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
template.addVar("made_area", stringInput(data.getMadeArea()));//货物产地 |
|
|
|
template.addVar("send_port", stringInput(data.getSendPort()));//发货港 |
|
|
|
template.addVar("shipper", stringInput(data.getShipper()));//发货人 |
|
|
|
template.addVar("voyage", notifyHeader.getBuNo().equals("01-Label") || notifyHeader.getBuNo().equals("03-RFID") |
|
|
|
?stringInput(notifyHeader.getCmcInvoice()) :stringInput(data.getVoyage()));//航次 |
|
|
|
/* template.addVar("voyage", notifyHeader.getBuNo().equals("01-Label") || notifyHeader.getBuNo().equals("03-RFID") |
|
|
|
?stringInput(notifyHeader.getCmcInvoice()) :stringInput(data.getVoyage()));//航次*/ |
|
|
|
template.addVar("delivery_goods_date", stringInput(data.getDeliveryGoodsDate()));//提货日期 |
|
|
|
template.addVar("shipping_date", stringInput(data.getShippingDate()));//船期 |
|
|
|
// 装箱数据 |
|
|
|
List<EcssCoDelPalletHeaderData> palletHeaderDataList = coDelMapper.searchEcssCoDelPalletHeaderData(notifyHeader); |
|
|
|
// 最高的栈板 |
|
|
|
/* Optional<EcssCoDelPalletHeaderData> palletHeaderData = palletHeaderDataList.isEmpty()? Optional.empty() : |
|
|
|
palletHeaderDataList.stream().max(Comparator.comparing(EcssCoDelPalletHeaderData::getHeight));*/ |
|
|
|
Optional<EcssCoDelPalletHeaderData> palletHeaderData = palletHeaderDataList.isEmpty()? Optional.empty() : |
|
|
|
palletHeaderDataList.stream().max(Comparator.comparing(EcssCoDelPalletHeaderData::getVolume)); |
|
|
|
// 需要计算的 |
|
|
|
// 总托数 |
|
|
|
Integer totalPlt = palletHeaderDataList.stream() |
|
|
|
@ -2743,10 +2719,7 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
} |
|
|
|
template.addVar("volume", notifyHeader.getWalMartOrderFlag()!=null && notifyHeader.getWalMartOrderFlag().equals("Y")? |
|
|
|
notifyHeader.getTotalVolume(): totalVolume); |
|
|
|
/* template.addVar("highest", palletHeaderData.isPresent() ?palletHeaderData.map(ecssCoDelPalletHeaderData -> |
|
|
|
ecssCoDelPalletHeaderData.getLength().setScale(2, RoundingMode.HALF_UP) |
|
|
|
+ "*" + ecssCoDelPalletHeaderData.getWidth().setScale(2, RoundingMode.HALF_UP) + "*" |
|
|
|
+ ecssCoDelPalletHeaderData.getHeight().setScale(2, RoundingMode.HALF_UP)).orElse(""):"");*/ |
|
|
|
template.addVar("highest", palletHeaderData.isPresent() ?palletHeaderData.get().getVolume():""); |
|
|
|
template.addVar("pickup_date", notifyHeader.getNotifyDate() != null ? |
|
|
|
DateUtils.format(notifyHeader.getNotifyDate(), "yyyy-MM-dd") : ""); |
|
|
|
List<Map> ecssContacts = coDelMapper.getEcssContacts(notifyHeader.getBuNo()); |
|
|
|
@ -2777,6 +2750,52 @@ public class CoDelExcelTXServiceImpl implements CoDelExcelTXService { |
|
|
|
template.addListVarAll(notifyDetailGroup); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 出货通知 |
|
|
|
*/ |
|
|
|
private void extractedShippingNotice(ExcelTemplateAdapter template, EcssCoDelNotifyHeaderData notifyHeader) { |
|
|
|
template.addVar("cmc_invoice", notifyHeader.getCmcInvoice()); |
|
|
|
template.addVar("year", DateUtils.format(notifyHeader.getReadyDate(), "yyyy")); |
|
|
|
template.addVar("month", DateUtils.format(notifyHeader.getReadyDate(), "M")); |
|
|
|
template.addVar("day", DateUtils.format(notifyHeader.getReadyDate(), "d")); |
|
|
|
template.addVar("today", DateUtils.format(new Date(), "yyyy年M月d日")); |
|
|
|
List<Map> list = coDelMapper.selectBoxListTX(notifyHeader); |
|
|
|
// 装箱数据 |
|
|
|
List<EcssCoDelPalletHeaderData> palletHeaderDataList = coDelMapper.searchEcssCoDelPalletHeaderData(notifyHeader); |
|
|
|
// 总托数 |
|
|
|
Integer totalPlt = palletHeaderDataList.stream() |
|
|
|
.map(EcssCoDelPalletHeaderData::getPalletQty) |
|
|
|
.filter(Objects::nonNull) // 防止空指针 |
|
|
|
.reduce(0, Integer::sum); |
|
|
|
BigDecimal totalCartons = BigDecimal.valueOf(0.0); |
|
|
|
BigDecimal grossWeight = BigDecimal.valueOf(0.0); |
|
|
|
for (int m = 0; m < list.size(); m++) { |
|
|
|
totalCartons = totalCartons.add(list.get(m).get("box_qty") !=null? new BigDecimal(list.get(m).get("box_qty").toString()) : BigDecimal.valueOf(0.0)); |
|
|
|
grossWeight = grossWeight.add(list.get(m).get("gross_weight") !=null?new BigDecimal(list.get(m).get("gross_weight").toString()):BigDecimal.valueOf(0.0)); |
|
|
|
} |
|
|
|
// 托盘重量=根据每个pallet的重量*数量累加 |
|
|
|
BigDecimal palletWeight = BigDecimal.ZERO; |
|
|
|
for (EcssCoDelPalletHeaderData palletHeader : palletHeaderDataList) { |
|
|
|
if (palletHeader.getPallet() != null && !palletHeader.getPallet().isEmpty()) { |
|
|
|
// 根据pallet编号查询EcssPallet信息 |
|
|
|
List<EcssPalletData> palletDataList = coDelMapper.getPallet(notifyHeader.getSite(), notifyHeader.getBuNo(), palletHeader.getPallet()); |
|
|
|
if (!palletDataList.isEmpty()) { |
|
|
|
EcssPalletData palletData = palletDataList.get(0); |
|
|
|
if (palletData.getPalletWeight() != null && palletHeader.getPalletQty() != null) { |
|
|
|
// 栈板重量 = 单个栈板重量 * 数量 |
|
|
|
palletWeight = palletWeight.add(palletHeader.getVolume()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
template.addVar("Gross_Weight", (grossWeight.add(palletWeight)).setScale(2, RoundingMode.HALF_UP)); |
|
|
|
if (palletHeaderDataList.isEmpty()) { |
|
|
|
totalPlt = totalCartons.setScale(0, RoundingMode.HALF_UP).intValue(); |
|
|
|
} |
|
|
|
template.addVar("total_plt", totalPlt); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 根据装箱明细计算总体积 |
|
|
|
* |
|
|
|
|