From 9c59416fd6a01d440de526f6661e64480beafa6f Mon Sep 17 00:00:00 2001 From: linfso Date: Sat, 11 Jan 2025 15:51:24 +0800 Subject: [PATCH] md --- .../service/impl/EmisWaybillServiceImpl.java | 207 +++++++++++++++++- .../src/main/resources/tpl/ws_kd_in_tpl.docx | Bin 30509 -> 30552 bytes 2 files changed, 202 insertions(+), 5 deletions(-) diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java index 1f2579218..558b15f71 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisWaybillServiceImpl.java @@ -3946,8 +3946,8 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb return emisWaybillMapper.selectPrintWaybillList(emisWaybill); } - @Override - public void genWarehouseInTplFileByOms(HttpServletResponse response, String orderSn) throws EmisBizError { + @Deprecated + public void tmp_genWarehouseInTplFileByOms(HttpServletResponse response, String orderSn) throws EmisBizError { if(StringUtils.isEmpty(orderSn)){ throw new EmisBizError(EmisBizErrorType.NOT_EXISTS,"订单号为空"); @@ -4103,9 +4103,8 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb } - @Override - public void genWarehouseInTplFile(HttpServletResponse response, String orderSn,String fileType) throws EmisBizError { + public void genWarehouseInTplFileByOms(HttpServletResponse response, String orderSn,String fileType) throws EmisBizError { if(StringUtils.isEmpty(orderSn)){ throw new EmisBizError(EmisBizErrorType.NOT_EXISTS,"订单号为空"); @@ -4153,6 +4152,7 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb tplName="tpl/ws_ls_in_tpl.docx"; } + BigDecimal totalPrice=BigDecimal.ZERO; try { OutputStream outputStream = response.getOutputStream(); InputStream fis = new ClassPathResource(tplName).getInputStream(); @@ -4168,6 +4168,17 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb queryDeclareGoods.setWaybillId(emisWaybillOld.getId()); declareGoodsList=emisWaybillDeclareGoodsMapper.selectEmisWaybillDeclareGoodsList(queryDeclareGoods); + if(!CollectionUtils.isEmpty(declareGoodsList)){ + for (EmisWaybillDeclareGoods itemGoods:declareGoodsList) { + itemGoods.setPrice(itemGoods.getPrice().stripTrailingZeros()); + itemGoods.setCargoQty(itemGoods.getCargoQty().stripTrailingZeros()); + + if(itemGoods.getPrice()!=null) { + totalPrice = totalPrice.add(itemGoods.getPrice()) + } + } + } + } // 非快递不需要明细 else { @@ -4239,7 +4250,193 @@ public class EmisWaybillServiceImpl extends EmisBaseService implements IEmisWayb fillMap.put("barcode", Pictures.ofBufferedImage(barcodeImageBuffer, PictureType.JPEG).size(width, height).create()); fillMap.put("cargoList", declareGoodsList); -// fillMap.put("cargoList", emisWaybillOld.getCargoList()); + + fillMap.put("totalPrice", totalPrice.stripTrailingZeros()); + + // 生成模版 + XWPFTemplate template = XWPFTemplate.compile(fis, config).render(fillMap); + + // docx + if("docx".equals(fileType)){ + response.setContentType("application/octet-stream;charset=UTF-8"); + response.setHeader("Content-Disposition", "attachment;fileName=" + fileName + ".docx"); + response.addHeader("Access-Control-Expose-Headers", "Content-disposition"); + template.write(outputStream); + } + // pdf + else { + response.setContentType("application/pdf"); + response.setHeader("Content-Disposition", "attachment;fileName=" + fileName + ".pdf"); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + // 写入流 + template.write(bos); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + DocUtils.wordToPdf(bis, outputStream); + + } + response.flushBuffer(); + + IOUtils.closeQuietly(fis); + IOUtils.closeQuietly(outputStream); + } + catch (Exception ex){ + ex.printStackTrace(); + throw new EmisBizError(EmisBizErrorType.FAIL,"生成进仓单出错:"+ ex.getMessage()); + } + + } + + + @Override + public void genWarehouseInTplFile(HttpServletResponse response, String orderSn,String fileType) throws EmisBizError { + + if(StringUtils.isEmpty(orderSn)){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS,"订单号为空"); + } + + EmisWaybill emisWaybillOld = this.selectEmisWaybillByOrderSn(orderSn); + if(emisWaybillOld==null){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS,"订单不存在"); + } + + if(OrderStatus.CANCEL.statusCode.equals(emisWaybillOld.getOrderStatus())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"订单已取消"); + } + + + if(!"1".equals(emisWaybillOld.getPickupMethod()) && !"3".equals(emisWaybillOld.getPickupMethod())){ + throw new EmisBizError(EmisBizErrorType.FAIL,"取件方式非仓库收货/整柜提货"); + } + + if(StringUtils.isEmpty(emisWaybillOld.getIntoWarehouseBillCode())){ + throw new EmisBizError(EmisBizErrorType.NOT_EXISTS,"进仓预报单号为空"); + } + + // 根据不同线路使用不同模版 + String tplName="tpl/ws_ls_in_tpl.docx"; + EmisTransLine emisTransLine = getTransLineByCode(emisWaybillOld.getTransLineType()); + // 快递 + if("1".equals(emisTransLine.getTransType()) ){ + tplName="tpl/ws_kd_in_tpl.docx"; + } + // 空运 + else if("2".equals(emisTransLine.getTransType()) ){ + tplName="tpl/ws_air_in_tpl.docx"; + } + // 陆运 + else if("3".equals(emisTransLine.getTransType()) ){ + tplName="tpl/ws_ls_in_tpl.docx"; + } + // 海运 + else if("4".equals(emisTransLine.getTransType()) ){ + tplName="tpl/ws_ls_in_tpl.docx"; + } + // 铁路 + else if("4".equals(emisTransLine.getTransType()) ){ + tplName="tpl/ws_ls_in_tpl.docx"; + } + + BigDecimal totalPrice=BigDecimal.ZERO; + try { + OutputStream outputStream = response.getOutputStream(); + InputStream fis = new ClassPathResource(tplName).getInputStream(); + /*1.根据模板生成文档*/ + String fileName = URLEncoder.encode(emisWaybillOld.getIntoWarehouseBillCode(), "UTF-8"); + + List declareGoodsList = null; + + // 快递需要明细 + if("1".equals(emisTransLine.getTransType()) ){ + // 货物清单 使用货物总览 + EmisWaybillDeclareGoods queryDeclareGoods = new EmisWaybillDeclareGoods(); + queryDeclareGoods.setWaybillId(emisWaybillOld.getId()); + declareGoodsList=emisWaybillDeclareGoodsMapper.selectEmisWaybillDeclareGoodsList(queryDeclareGoods); + + if(!CollectionUtils.isEmpty(declareGoodsList)){ + for (EmisWaybillDeclareGoods itemGoods:declareGoodsList) { + itemGoods.setPrice(itemGoods.getPrice().stripTrailingZeros()); + itemGoods.setCargoQty(itemGoods.getCargoQty().stripTrailingZeros()); + + if(itemGoods.getPrice()!=null) { + totalPrice = totalPrice.add(itemGoods.getPrice()) + } + } + } + + } + // 非快递不需要明细 + else { + declareGoodsList = new ArrayList(); + + EmisWaybillDeclareGoods cargoDeclareGoods = new EmisWaybillDeclareGoods(); + cargoDeclareGoods.setGoodsName(emisWaybillOld.getGoodsInfo()); + cargoDeclareGoods.setWeight(BigDecimal.valueOf(Double.valueOf(emisWaybillOld.getBillWeight().stripTrailingZeros().toPlainString()))); + cargoDeclareGoods.setVolume(BigDecimal.valueOf(Double.valueOf(emisWaybillOld.getTotalVolume().stripTrailingZeros().toPlainString()))); + cargoDeclareGoods.setLength(BigDecimal.ZERO); + cargoDeclareGoods.setWidth(BigDecimal.ZERO); + cargoDeclareGoods.setHeight(BigDecimal.ZERO); + cargoDeclareGoods.setCargoQty(BigDecimal.valueOf(emisWaybillOld.getParcelQty())); + declareGoodsList.add(cargoDeclareGoods); + } + + // 生成条码 + int width = 400; + int height = 70; + BufferedImage barcodeImageBuffer = BarcodeUtils.getBarCodeWithWord(emisWaybillOld.getIntoWarehouseBillCode(), width, height, 100); + + // 填充模版数据 + LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy(); + Configure config = Configure.builder().bind("cargoList", policy).build(); + + String customsEclaration = ""; + if (!StringUtils.isEmpty(emisWaybillOld.getCustomsEclaration())) { + customsEclaration = DictUtils.getDictLabel("emis_declare_mode", emisWaybillOld.getCustomsEclaration()); + } + + String customsClear = ""; + if (!StringUtils.isEmpty(emisWaybillOld.getCustomsClear())) { + customsClear = DictUtils.getDictLabel("emis_customs_clear", emisWaybillOld.getCustomsClear()); + } + + Map fillMap = new HashMap<>(); + fillMap.put("wsInNo", emisWaybillOld.getIntoWarehouseBillCode()); + fillMap.put("country", emisWaybillOld.getReceiveCountryName()); + fillMap.put("warehouse", emisWaybillOld.getIntoWarehouseName()); + fillMap.put("productName", emisWaybillOld.getProductTypeName()); + fillMap.put("estDate", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, emisWaybillOld.getPickStartDate() == null ? emisWaybillOld.getOrderDate() : emisWaybillOld.getPickStartDate())); + fillMap.put("declareType", customsEclaration); + fillMap.put("eDeclareType", customsClear); + fillMap.put("supplier", ""); + + fillMap.put("sendName", Convert.chineseName(emisWaybillOld.getSendName())); + fillMap.put("sendTel", Convert.mobile(emisWaybillOld.getSendMobile())); + fillMap.put("sendAddress", Convert.address(emisWaybillOld.getSendAddress())); + fillMap.put("sendCompany", emisWaybillOld.getSendCompany()); + fillMap.put("sendCountry", emisWaybillOld.getSendCountryName()); + + fillMap.put("recvName", Convert.chineseName(emisWaybillOld.getReceiveName())); + fillMap.put("recvTel", Convert.mobile(emisWaybillOld.getReceiveMobile())); + fillMap.put("recvAddress", Convert.address(emisWaybillOld.getReceiveAddress())); + fillMap.put("recvCompany", emisWaybillOld.getReceiveCompany()); + fillMap.put("recvCountry", emisWaybillOld.getReceiveCountryName()); + + fillMap.put("wsContact", emisWaybillOld.getIntoWarehouseContact()); + fillMap.put("wsPhone", emisWaybillOld.getIntoWarehousePhone()); + fillMap.put("wsAddress", emisWaybillOld.getIntoWarehouseAddress()); + fillMap.put("salesmen", emisWaybillOld.getSalesmen()); + + fillMap.put("sendProvinceName", emisWaybillOld.getSendProvinceName()); + fillMap.put("sendCityName", emisWaybillOld.getSendCityName()); + + fillMap.put("recvProvinceName", emisWaybillOld.getReceiveProvinceName()); + fillMap.put("recvCityName", emisWaybillOld.getReceiveCityName()); + + fillMap.put("barcode", Pictures.ofBufferedImage(barcodeImageBuffer, PictureType.JPEG).size(width, height).create()); + + fillMap.put("cargoList", declareGoodsList); + + fillMap.put("totalPrice", totalPrice.stripTrailingZeros()); // 生成模版 XWPFTemplate template = XWPFTemplate.compile(fis, config).render(fillMap); diff --git a/emis-biz/src/main/resources/tpl/ws_kd_in_tpl.docx b/emis-biz/src/main/resources/tpl/ws_kd_in_tpl.docx index 08f75adb8d9958f8118f01d83f458767bb6fbe4c..a7df1b5d310454feb65328ba6e4fa68e7c8eadee 100644 GIT binary patch delta 13129 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 I|8v3r0K3sczyJUM delta 13109 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 z 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