Browse Source

增加PDF打印功能,主要是面对申通

hexiugang 1 week ago
parent
commit
ade5dc0ef4

+ 12 - 0
watero-rst-web/pom.xml

@@ -141,6 +141,18 @@
             <version>6.0.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.pdfbox</groupId>
+            <artifactId>pdfbox</artifactId>
+            <version>2.0.24</version> <!-- 使用最新版本 -->
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.github.kuaidi100-api</groupId>
+            <artifactId>sdk</artifactId>
+            <version>1.0.11</version>
+        </dependency>
 
         <!-- 工作流 -->
      <!--   <dependency>

+ 8 - 1
watero-rst-web/src/main/java/com/iamberry/rst/controllers/mq/TaobaoTask.java

@@ -98,7 +98,13 @@ public class TaobaoTask {
         }
         logger.info("【淘宝订单】开始抓取数据......");
         // 组装请求数据
-        String startTime = RedisUtils.get("TAOBAO_SYNC_TIME");
+        String startTime = null;
+        try {
+            startTime = RedisUtils.get("TAOBAO_SYNC_TIME");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        logger.info("【淘宝订单】从{}", startTime);
         if (startTime == null) {
             startTime = DateTimeUtil.format(DateTimeUtil.addHour(-15), "yyyy-MM-dd HH:mm:ss");
             RedisUtils.put("TAOBAO_SYNC_TIME", startTime);
@@ -108,6 +114,7 @@ public class TaobaoTask {
         if (endTime == null) {
             endTime = DateTimeUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
         }
+        logger.info("【淘宝订单】到{}", endTime);
 
         // 同时拉取爱贝源和美塔璞儿的淘宝店铺
         int[] storeIds = new int[]{STORE_ID_METAPURE, STORE_ID_IAMBERRY, STORE_TB_LANG};

+ 62 - 3
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -8,6 +8,7 @@ import com.doudian.open.api.order_orderDetail.data.OrderOrderDetailData;
 import com.doudian.open.api.order_orderDetail.param.OrderOrderDetailParam;
 import com.doudian.open.core.AccessToken;
 import com.doudian.open.core.AccessTokenBuilder;
+import com.google.gson.Gson;
 import com.iamberry.app.tool.util.AES;
 import com.iamberry.redis.RedisUtils;
 import com.iamberry.rst.controllers.mq.DouyinTask;
@@ -36,11 +37,21 @@ import com.iamberry.rst.service.cm.mapper.SalesOrderMapper;
 import com.iamberry.rst.util.PageUtil;
 import com.iamberry.rst.utils.AdminUtils;
 import com.iamberry.rst.utils.OrderUtils;
+import com.iamberry.rst.utils.STOUtil;
 import com.iamberry.rst.utils.StitchAttrUtil;
 import com.iamberry.wechat.tools.*;
 import com.iamberry.wechat.tools.payUtil.DatetimeUtil;
 import com.iamberry.wechat.tools.payUtil.StringUtil;
 import com.jd.open.api.sdk.domain.order.OrderQueryJsfService.response.enGet.OrderSearchInfo;
+import com.kuaidi100.sdk.api.LabelV2;
+import com.kuaidi100.sdk.contant.ApiInfoConstant;
+import com.kuaidi100.sdk.contant.CompanyConstant;
+import com.kuaidi100.sdk.contant.PrintType;
+import com.kuaidi100.sdk.core.IBaseClient;
+import com.kuaidi100.sdk.request.ManInfo;
+import com.kuaidi100.sdk.request.PrintReq;
+import com.kuaidi100.sdk.request.labelV2.OrderReq;
+import com.kuaidi100.sdk.utils.SignUtils;
 import com.taobao.api.ApiException;
 import com.taobao.api.DefaultTaobaoClient;
 import com.taobao.api.TaobaoClient;
@@ -333,6 +344,7 @@ public class AwaitSendController {
 
     private void vaildDouyinOrder(SalesOrder temp, List<SalesOrder> salesOrderList) {
         Integer salesStoreId = temp.getSalesStoreId();
+        LOGGER.info("店铺信息:{}", salesStoreId);
         Long shopId;
         // 映射到抖音的shopId,保存的地方在DouyinTask中
         if (salesStoreId == 148) {
@@ -451,7 +463,17 @@ public class AwaitSendController {
             throw new RuntimeException("淘宝店铺未授权");
         }
 
-        Trade details = taobaoTask.getOrderDetails(Long.parseLong(id), token);
+        Trade details = null;
+        try {
+            details = taobaoTask.getOrderDetails(Long.parseLong(id), token);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return;
+        }
+        if (details == null) {
+            salesOrderList.add(temp);
+            return;
+        }
         LOGGER.info("获取到的淘宝订单数据:{}", JSONObject.toJSONString(details));
         int stats = 0;
         for (Order order : details.getOrders()) {
@@ -669,6 +691,39 @@ public class AwaitSendController {
         if (eOrderRequestData == null) {
             return ResponseJson.getFAILURE().addResponseKeyValue("error","物流公司未设置对应的数据" + salesOrderInfo.getSalesPostFirm());
         }
+
+        // 判断是否为申通??
+        if (salesOrderInfo.getSalesPostFirm().equalsIgnoreCase("STO")) {
+            SalesOrderItem item = new SalesOrderItem();
+            item.setItemOrderId(salesOrderInfo.getSalesId());
+            List<SalesOrderItem> items = salesOrderService.listSalesOrderItem(item);
+            salesOrderInfo.setSalesOrderItemList(items);
+
+
+            try {
+                // 下单请求
+                String postNum = STOUtil.reqOrder(salesOrderInfo, storeShip);
+                // 请求发货
+                SalesOrder order = new SalesOrder();
+                order.setSalesPostNum(postNum);
+                order.setSalesId(salesOrderInfo.getSalesId());
+                order.setSalesDealCode(salesOrderInfo.getSalesDealCode());
+                List<SalesOrder> changeOrderList = new ArrayList<>(1);
+                changeOrderList.add(order);
+                if (salesOrderService.printOrder(changeOrderList, AdminUtils.getLoginAdminId()) <= 0) {
+                    throw new RuntimeException("订单发货失败,请核查");
+                }
+                // 返回数据
+
+                JSONObject jsonObject = JSONObject.parseObject("{\"Success\":true}");
+                jsonObject.put("pdf", "/common/send_order_pdf/" + salesId + ".pdf");
+                return ResponseJson.getSUCCESS().addResponseKeyValue("json", jsonObject.toJSONString());
+            } catch (Exception e) {
+                return ResponseJson.getFAILURE().addResponseKeyValue("error", e.getMessage());
+            }
+        }
+
+
         // 判断是否是京东订单  订单来源 2020年3月30日新增
         if("jd".equalsIgnoreCase(salesOrderInfo.getSalesPostFirm())){
             StoreInfo storeInfo = storeInfoService.getStoreInfoById(salesOrderInfo.getSalesStoreId());
@@ -853,8 +908,6 @@ public class AwaitSendController {
         return ResponseJson.getSUCCESS().addResponseKeyValue("json", jsonObject.toJSONString());
     }
 
-
-
     //淘宝电子名单云打印
     private ResponseJson tbPrintOrder(SalesOrder salesOrderInfo, EOrderRequestData eOrderRequestData) throws ApiException {
 
@@ -1037,6 +1090,12 @@ public class AwaitSendController {
                                      @RequestParam("salesId") Integer salesId,
                                      HttpServletRequest request) throws IOException {
         SalesOrder salesOrderInfo = salesOrderService.getSalesOrderById(salesId);
+        if ("STO".equalsIgnoreCase(salesOrderInfo.getSalesPostFirm())) {
+            // 返回数据
+            JSONObject jsonObject = JSONObject.parseObject("{\"Success\":true}");
+            jsonObject.put("pdf", "/common/send_order_pdf/" + salesId + ".pdf");
+            return ResponseJson.getSUCCESS().addResponseKeyValue("json", jsonObject.toJSONString());
+        }
         String savePath = request.getServletContext().getRealPath("/common/") +
                 File.separator + "send_order" +
                 File.separator +

+ 2 - 1
watero-rst-web/src/main/java/com/iamberry/rst/utils/OrderUtils.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.iamberry.rst.core.order.EOrderRequestData;
 import com.iamberry.wechat.tools.HttpClient431Util;
 import com.iamberry.wechat.tools.NameUtils;
+import org.apache.xmlbeans.impl.util.Base64;
 
 import java.io.*;
 import java.net.HttpURLConnection;
@@ -81,7 +82,7 @@ public class OrderUtils {
      * @throws UnsupportedEncodingException
      */
     private static String base64(String str, String charset) throws UnsupportedEncodingException {
-        return null;
+        return new String(Base64.encode(str.getBytes(charset)));
     }
 
     @SuppressWarnings("unused")

+ 296 - 0
watero-rst-web/src/main/java/com/iamberry/rst/utils/STOUtil.java

@@ -0,0 +1,296 @@
+package com.iamberry.rst.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.iamberry.redis.RedisUtils;
+import com.iamberry.rst.core.cm.SalesOrder;
+import com.iamberry.rst.core.cm.SalesOrderItem;
+import com.iamberry.rst.core.cm.StoreShip;
+import com.iamberry.wechat.tools.NameUtils;
+import com.kuaidi100.sdk.api.LabelV2;
+import com.kuaidi100.sdk.contant.ApiInfoConstant;
+import com.kuaidi100.sdk.contant.CompanyConstant;
+import com.kuaidi100.sdk.contant.PrintType;
+import com.kuaidi100.sdk.core.IBaseClient;
+import com.kuaidi100.sdk.pojo.HttpResult;
+import com.kuaidi100.sdk.request.ManInfo;
+import com.kuaidi100.sdk.request.PrintReq;
+import com.kuaidi100.sdk.request.labelV2.OrderReq;
+import com.kuaidi100.sdk.utils.SignUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.common.PDRectangle;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType0Font;
+import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
+import org.apache.pdfbox.rendering.ImageType;
+import org.apache.pdfbox.rendering.PDFRenderer;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Base64;
+import java.util.Random;
+
+/**
+ * 申通快递工具类
+ */
+public class STOUtil {
+
+    private static final String key = "uknWvlpO7197";
+    private static final String secret = "a70ccd810db645e296ebe1696b49ea5d";
+    private static final String tempId = "ee26673ec17a4e1ca7f7911d68e5304f";
+    private static final String JD_TYPE = "jdalpha";
+
+    /**
+     * 请求下单
+     */
+    public static String reqOrder(SalesOrder salesOrder, StoreShip sender) throws Exception {
+        // 判断快递类型:只处理申通的订单
+        if (!"STO".equalsIgnoreCase(salesOrder.getSalesPostFirm())) {
+            throw new RuntimeException("请使用申通快递");
+        }
+        // 获取店铺授权数据
+        JSONObject kuaidi100 = JSONObject.parseObject(RedisUtils.get("kuaidi100"));
+        if (kuaidi100 == null) {
+            throw new RuntimeException("请先配置快递100授权信息");
+        }
+        if (!kuaidi100.containsKey(salesOrder.getSalesStoreId().toString())) {
+            throw new RuntimeException("未查询到店铺配置的授权信息");
+        }
+        JSONObject store = kuaidi100.getJSONObject(salesOrder.getSalesStoreId().toString());
+        /*
+         * 组装数据
+         */
+        ManInfo recManInfo  = new ManInfo();
+
+        // 收货人信息
+        recManInfo.setName(salesOrder.getSalesAddressName());
+        recManInfo.setMobile(salesOrder.getSalesAddressTel());
+        recManInfo.setPrintAddr(salesOrder.getSalesAddressInfo());
+        // 发货人信息
+        ManInfo sendManInfo = new ManInfo();
+        sendManInfo.setName(sender.getStoreShipName());
+        sendManInfo.setMobile(sender.getStoreShipTel());
+        sendManInfo.setPrintAddr(sender.getStoreShipProvince() + " " + sender.getStoreShipCity() + " " + sender.getStoreShipAddress());
+        /// 订单信息
+        OrderReq orderReq = new OrderReq();
+        orderReq.setKuaidicom(CompanyConstant.ST);
+        orderReq.setCount(1);
+        orderReq.setTempId(tempId);
+        orderReq.setSendMan(sendManInfo);
+        orderReq.setRecMan(recManInfo);
+        orderReq.setPrintType(JD_TYPE.equalsIgnoreCase(store.getString("net"))?PrintType.IMAGE:PrintType.HTML);
+        orderReq.setPartnerId(store.getString("parterId"));
+        orderReq.setPartnerKey(store.getString("partnerKey"));
+        orderReq.setPartnerName(store.getString("partnerName"));
+        orderReq.setNet(store.getString("net"));
+        String param = new Gson().toJson(orderReq);
+        String t = System.currentTimeMillis() + "";
+        PrintReq printReq = new PrintReq();
+        printReq.setT(t);
+        printReq.setKey(key);
+        printReq.setSign(SignUtils.printSign(param,t,key,secret));
+        printReq.setMethod(ApiInfoConstant.ORDER);
+        printReq.setParam(param);
+        // 请求
+        IBaseClient baseClient = new LabelV2();
+        HttpResult execute = baseClient.execute(printReq);
+        JSONObject result = JSONObject.parseObject(execute.getBody());
+        if (!result.containsKey("success") || !"true".equalsIgnoreCase(result.getString("success"))) {
+            throw new RuntimeException("下单失败:" + result.getString("message"));
+        }
+        // 暂停2秒
+        Thread.sleep(3000);
+        // 启动数据
+        JSONObject data = result.getJSONObject("data");
+        // 下单成功:如果是京东,返回的是image,所以先将Image转换为pdf
+        String filePath = orderReq.getPrintType()==PrintType.IMAGE ?
+                (saveImageToPdf(data.getString("label"), salesOrder.getSalesId().toString())) :
+                (savePdf(data.getString("label"), salesOrder.getSalesId().toString()));
+        // 添加产品水印
+        addWordText(filePath, salesOrder, orderReq.getPrintType());
+        // 返回文件路径
+         return data.getString("kuaidinum");
+    }
+
+    public static String pdf2Base64(String path) throws IOException {
+        try (PDDocument document = PDDocument.load(new File(path))) {
+            // PDF转IMG
+            PDFRenderer renderer = new PDFRenderer(document);
+            BufferedImage image = renderer.renderImageWithDPI(0, 300, ImageType.RGB);
+            /*
+            不用保存
+            ImageIO.write(image, "jpg", new File(path.replace("pdf", "jpg")));
+            // 获取原始图片的Graphics2D对象
+            java.awt.Graphics2D g2 = image.createGraphics();
+            g2.setRenderingHint(java.awt.RenderingHints.KEY_INTERPOLATION, java.awt.RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+            g2.drawImage(image, 0, 0, 100, 180, null);
+            g2.dispose();
+            // 保存新的图片文件
+            ImageIO.write(image, "jpg", new File(path.replace("pdf", "jpg")));
+             */
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            // 将字节转换为Base64字符串
+            ImageIO.write(image, "PNG", baos);
+            byte[] imageInByte = baos.toByteArray();
+            return Base64.getEncoder().encodeToString(imageInByte);
+
+        }
+    }
+
+    public static void main(String[] args) {
+        try {
+            pdf2Base64("/Users/apple/Desktop/683695.pdf");
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    public static void addWordText(String filePath, SalesOrder salesOrder, PrintType type) {
+        try {
+            // 加载PDF文档
+            System.out.println("加载PDF文档..."+filePath);
+            PDDocument document = PDDocument.load(new File(filePath));
+            // 加载字体文件
+            PDFont font = PDType0Font.load(document, new File(NameUtils.getConfig("font_file_path")));
+            // 获取第一页
+            PDPage page = document.getPage(0);
+            // 创建页面内容流
+            PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true, true);
+            // 设置字体和字体大小
+            contentStream.setFont(font, type==PrintType.IMAGE? 2 : 6);
+            // 设置文本颜色
+            contentStream.setStrokingColor(255, 0, 0);
+            // 开始文本绘制
+            for (int i = 0; i < salesOrder.getSalesOrderItemList().size(); i++) {
+                SalesOrderItem item = salesOrder.getSalesOrderItemList().get(i);
+                String productText = item.getItemProductName()+"("+item.getItemProductColor()+")*"+item.getItemNum();
+                contentStream.beginText();
+                if (type==PrintType.IMAGE) {
+                    contentStream.moveTextPositionByAmount(8,  45 - (i * 3));
+                } else {
+                    contentStream.moveTextPositionByAmount(10, 130 - (i * 10));
+                }
+                if (i == 0) {
+                    contentStream.showText("产品:" + productText);
+                } else {
+                    contentStream.showText("     >>" + productText);
+                }
+                contentStream.endText();
+            }
+            // 关闭页面内容流
+            contentStream.close();
+            // 保存PDF文档
+            document.save(filePath);
+            // 关闭PDF文档
+            document.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static String saveImageToPdf(String imageUrl, String fileName) throws IOException {
+        // 1. 下载你的图片转成字节
+        byte[] imageBytes = downloadImage(imageUrl);
+        // 2. 生成一页 PDF document
+        PDDocument document = new PDDocument();
+        PDImageXObject image = PDImageXObject.createFromByteArray(document, imageBytes, "image");
+        // 这里是你生成PDF自适应图片大小,不设置会默认为A4
+        PDRectangle pageSize = new PDRectangle(100, 180);
+        PDPage page = new PDPage(pageSize);
+        document.addPage(page);
+        // 3.将 图片 添加进PDF document
+        PDPageContentStream contentStream = new PDPageContentStream(document, page);
+        float pageWidth = pageSize.getWidth();
+        float pageHeight = pageSize.getHeight();
+        float imageWidth = image.getWidth();
+        float imageHeight = image.getHeight();
+        float scale = Math.min(pageWidth / imageWidth, pageHeight / imageHeight);
+        float scaledWidth = imageWidth * scale;
+        float scaledHeight = imageHeight * scale;
+        float x = (pageWidth - scaledWidth) / 2;
+        float y = (pageHeight - scaledHeight) / 2;
+        // 这里是将你的图片填充入pdf页
+        contentStream.drawImage(image, x, y, scaledWidth, scaledHeight);
+        contentStream.close();
+
+        // 4. 保存PDF
+        String saveFile = NameUtils.getConfig("save_file_dir") + fileName + ".pdf";
+        File outputFile = new File(saveFile);
+        File parentFolder = outputFile.getParentFile();
+        if (parentFolder != null && !parentFolder.exists()) {
+            parentFolder.mkdirs();
+        }
+        document.save(outputFile);
+        document.close();
+        return saveFile;
+    }
+
+
+    /**
+     * 从输入流中获取字节数组
+     * @param inputStream
+     * @return
+     * @throws IOException
+     */
+    public static byte[] readInputStream(InputStream inputStream) throws IOException {
+        byte[] buffer = new byte[1024];
+        int len = 0;
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        while((len = inputStream.read(buffer)) != -1) {
+            bos.write(buffer, 0, len);
+        }
+        bos.close();
+        return bos.toByteArray();
+    }
+
+    public static String savePdf(String imageUrl, String fileName) throws IOException {
+        // 保存PDF
+        String saveFile = NameUtils.getConfig("save_file_dir") + fileName + ".pdf";
+        URL url = new URL(imageUrl);
+        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
+        conn.setConnectTimeout(5*1000);
+        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
+        InputStream inputStream = conn.getInputStream();
+        byte[] getData = readInputStream(inputStream);
+        File saveDir = new File(NameUtils.getConfig("save_file_dir"));
+        if(!saveDir.exists()){
+            saveDir.mkdir();
+        }
+        File file = new File(saveFile);
+        FileOutputStream fos = new FileOutputStream(file);
+        fos.write(getData);
+        if(fos != null){
+            fos.close();
+        }
+        if(inputStream!=null){
+            inputStream.close();
+        }
+        return saveFile;
+    }
+
+
+    private static byte[] downloadImage(String imageUrl) throws IOException {
+        HttpClient httpClient = HttpClientBuilder.create().build();
+        HttpGet httpGet = new HttpGet(imageUrl);
+        HttpResponse response = httpClient.execute(httpGet);
+        HttpEntity entity = response.getEntity();
+        InputStream inputStream = entity.getContent();
+        byte[] imageBytes = IOUtils.toByteArray(inputStream);
+        inputStream.close();
+        return imageBytes;
+    }
+
+}

BIN
watero-rst-web/src/main/resources/Microsoft YaHei.ttf


+ 3 - 0
watero-rst-web/src/main/resources/platform.properties

@@ -141,3 +141,6 @@ redis_max_active=200
 redis_max_idle=10
 redis_max_wait=2000
 redis_timeout=300
+#
+save_file_dir=/Users/apple/Desktop/
+font_file_path=/Users/apple/Desktop/code/iamberry-common-parent/watero-rst-web/src/main/resources/Microsoft YaHei.ttf

+ 43 - 22
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/list_wait_send_order.ftl

@@ -9,7 +9,7 @@
     <link rel="Bookmark" href="/favicon.ico" >
     <link rel="Shortcut Icon" href="/favicon.ico" />
     <#include "/base/list_base.ftl">
-    <script type="text/javascript" src="//s.iamberry.com/js/LodopFuncs_v_5_0.js"></script>
+    <script type="text/javascript" src="//s.iamberry.com/js/LodopFuncs_v_7_0.js"></script>
     <link href="${path}/common/lib/lightbox2/2.8.1/css/lightbox.css" rel="stylesheet" type="text/css" >
     <title>待发货订单列表</title>
     <style>
@@ -261,6 +261,18 @@
     <button type="button" onclick="subPrint();" class="btn" style="float: left;display: block;background: #32a3d8;color: #fff;-webkit-transform:translateY(-5%);height: 37px;margin-left: 220px;margin-top: 20px;" id="print-order-send"> 打印 </button>
 </div>
 <#include "/base/page_util.ftl">
+
+<script type="text/vbscript">
+     Function VBS_BinaryToArray(Binary)
+         Dim i
+         ReDim byteArray(LenB(Binary))
+         For i = 1 To LenB(Binary)
+             byteArray(i-1) = AscB(MidB(Binary, i, 1))
+         Next
+         VBS_BinaryToArray = byteArray
+     End Function
+</script>
+
 <script type="text/javascript">
     var selPrinter = -1;
     function toDoShow3(){
@@ -548,7 +560,6 @@
                             "error":function(data){
                             }
                         });
-
                         //查询子订单
                         if(SubOrders != null && SubOrders.length >= 1){
                             SubOrders.map(function (item,index,ary ) {
@@ -587,23 +598,28 @@
                         layer.closeAll();
                         toDoShow3();
                     }else{
+                        LODOP.PRINT_INIT('打印订单' + orderId);
+                        if (res.hasOwnProperty("pdf")) {
+                            LODOP.SET_PRINT_PAGESIZE(0, 0, 0, "");
+                            LODOP.ADD_PRINT_PDF(0,0,"100%","100%",demoDownloadPDF("https://rst.iamberry.com"+res.pdf));
+                        } else {
                             var html = res.PrintTemplate;
                             $("#temp-print-order").html(html);
-                            LODOP.PRINT_INIT('打印订单' + orderId);
                             LODOP.SET_PRINT_PAGESIZE(0, 0, 0,"");
                             LODOP.ADD_PRINT_HTM("0mm","0mm","100%","100%", $("#temp-print-order").html());
-                            LODOP.SELECT_PRINTER(true);
-                            // 注意,选择打印机后,需要更改打印机事件,否则无法执行回调
-                            var spans = $("span");
-                            for (var i = 0; i < spans.length; i++) {
-                                if ($(spans[i]).text() === "打印份数:") {
-                                    $(spans[i]).parent().next()[0].onclick = function () {
-                                        CLODOP.SelectBox.clickOK(false);
-                                        layer.msg("打印成功",{icon: 6,time:3000});
-                                    };
-                                }
+                        }
+                        LODOP.SELECT_PRINTER(true);
+                        // 注意,选择打印机后,需要更改打印机事件,否则无法执行回调
+                        var spans = $("span");
+                        for (var i = 0; i < spans.length; i++) {
+                            if ($(spans[i]).text() === "打印份数:") {
+                                $(spans[i]).parent().next()[0].onclick = function () {
+                                    CLODOP.SelectBox.clickOK(false);
+                                    layer.msg("打印成功",{icon: 6,time:3000});
+                                };
                             }
                         }
+                        }
                     } else {
                         layer.msg(res.Reason,{icon: 2,time:3000});
                     }
@@ -703,15 +719,20 @@
                                     layer.closeAll();
                                     toDoShow3();
                             }else{
-                                var html = res.PrintTemplate;
-                                $("#temp-print-order").html(html);
-                                LODOP.PRINT_INIT('打印订单' + orderId);
-                                LODOP.SET_PRINT_PAGESIZE(0, 0, 0,"");
-                                LODOP.ADD_PRINT_HTM("0mm","0mm","100%","100%", $("#temp-print-order").html());
-                                var flag = LODOP.PRINT();
-                                if (flag) {
-                                    layer.msg("打印成功",{icon: 6,time:3000});
-                                }
+                                    LODOP.PRINT_INIT('打印订单' + orderId);
+                                    if (res.hasOwnProperty("pdf")) {
+                                        LODOP.SET_PRINT_PAGESIZE(0, 0, 0, "");
+                                        LODOP.ADD_PRINT_PDF(0,0,"100%","100%",demoDownloadPDF("https://rst.iamberry.com"+res.pdf));
+                                    } else {
+                                        var html = res.PrintTemplate;
+                                        $("#temp-print-order").html(html);
+                                        LODOP.SET_PRINT_PAGESIZE(0, 0, 0,"");
+                                        LODOP.ADD_PRINT_HTM("0mm","0mm","100%","100%", $("#temp-print-order").html());
+                                    }
+                                    var flag = LODOP.PRINT();
+                                    if (flag) {
+                                        layer.msg("打印成功",{icon: 6,time:3000});
+                                    }
                               }
                             } else {
                                 layer.msg(res.Reason,{icon: 2,time:3000});

+ 32 - 12
watero-rst-web/src/main/webapp/WEB-INF/views/order/salesOrder/print_order.ftl

@@ -9,7 +9,7 @@
     <link rel="Bookmark" href="/favicon.ico" >
     <link rel="Shortcut Icon" href="/favicon.ico" />
     <#include "/base/add_base.ftl">
-    <script type="text/javascript" src="https://s.iamberry.com/js/LodopFuncs_v_5_0.js"></script>
+    <script type="text/javascript" src="https://s.iamberry.com/js/LodopFuncs_v_7_0.js"></script>
     <title>打单发货</title>
 
 </head>
@@ -103,6 +103,17 @@
 <tfoot>
 </tfoot>
 
+<script type="text/vbscript">
+     Function VBS_BinaryToArray(Binary)
+         Dim i
+         ReDim byteArray(LenB(Binary))
+         For i = 1 To LenB(Binary)
+             byteArray(i-1) = AscB(MidB(Binary, i, 1))
+         Next
+         VBS_BinaryToArray = byteArray
+     End Function
+</script>
+
 <script type="text/javascript">
     // 选择打印设备
     var selPrinter = -1;
@@ -197,12 +208,17 @@
                             } else {
                                 var res = $.parseJSON(data.returnMsg.json);
                                 if (data.resultMsg && res.Success) {
-                                    var html = res.PrintTemplate;
-                                    $("#temp-print-order").html(html);
-                                    LODOP.PRINT_INIT('打印订单' + orderId);
-                                    var SubPrintTemplates = res.SubPrintTemplates;
-                                    var SubOrders = res.SubOrders;
-                                    printing(isIE, isFirst,SubPrintTemplates,SubOrders,order);
+                                    if (res.hasOwnProperty("pdf")) {
+                                        LODOP.PRINT_INIT('打印订单' + orderId);
+                                        printing(isIE, isFirst,null,null,order, true, res.pdf);
+                                    } else {
+                                        var html = res.PrintTemplate;
+                                        $("#temp-print-order").html(html);
+                                        LODOP.PRINT_INIT('打印订单' + orderId);
+                                        var SubPrintTemplates = res.SubPrintTemplates;
+                                        var SubOrders = res.SubOrders;
+                                        printing(isIE, isFirst,SubPrintTemplates,SubOrders,order, false, null);
+                                    }
                                 }else {
                                     // 第三方接口错误
                                     re_print(order, res.Reason, isIE, isFirst);
@@ -213,11 +229,15 @@
             });
         }
 
-
-        function printing(isIE, isFirst,SubPrintTemplates,SubOrders,order) {
-            let orderTemplate = $("#temp-print-order");
-            LODOP.SET_PRINT_PAGESIZE(0, 0, 0, "");
-            LODOP.ADD_PRINT_HTM("0mm", "0mm", "100%", "100%", orderTemplate.html());
+        function printing(isIE, isFirst,SubPrintTemplates,SubOrders,order, isPDF, pdf) {
+            if (isPDF) {
+                LODOP.SET_PRINT_PAGESIZE(0, 0, 0, "");
+                LODOP.ADD_PRINT_PDF(0,0,"100%","100%",demoDownloadPDF("https://rst.iamberry.com"+pdf));
+            } else {
+                let orderTemplate = $("#temp-print-order");
+                LODOP.SET_PRINT_PAGESIZE(0, 0, 0, "");
+                LODOP.ADD_PRINT_HTM("0mm", "0mm", "100%", "100%", orderTemplate.html());
+            }
             if (isIE) {
                 // IE类浏览器,直接打印
                 if (LODOP.PRINT()) {