电子面单云打印推送结果

此接口用于云打印文件推送,将文件推送给对接的客户,客户收到返回结果后,可以进pdf文件进行打印或是处理订单的状态等 。 蜂巢开发者与蜂巢之间采用WebSocket通讯,可参照订单推送这部分,只是增加一个顺丰云打印事件。

1. 消息事件

消息topic 说明
sf_push_cloud_print_waybills 将渲染打印完成的电子面单(pdf)格式内容,推送给蜂巢开发者

2. 事件处理


  @Override
    public void onMessageEvent(String message) {

        System.out.println("onMessageEvent:" + message);
        SyncTradeResponse syncTradeResponse = JSON.parseObject(message, SyncTradeResponse.class);
        if (syncTradeResponse.getCode() == 0) {

            if (syncTradeResponse.getTopic().equals("tb_push_wait_seller_send_trade")) {
                // 这里处理待发货订单的业务逻辑
                SyncTrade  syncTrade = JSON.parseObject(syncTradeResponse.getData(), SyncTrade.class);
                System.out.println("收到待发订单,sellerNick:"+ syncTrade.getSellerNick() +",订单号:" +  syncTrade.getTid() );

            } else if (syncTradeResponse.getTopic().equals("sf_push_cloud_print_waybills")){
                sfPushCloudPrintWaybills(syncTradeResponse);
            }

            //  如果是需要确认的消息,则确认此消息,否则服务端消息将会重发。
            if ( syncTradeResponse.getUuid() != null && !syncTradeResponse.getUuid().equals("")){
                send("{\"cmd\":\"ack_sync_data\", \"seq\":\"" + syncTradeResponse.getUuid() +   "\"}");
            }

        } else {
            System.out.println("服务端返回业务错误:"+ syncTradeResponse.getMsg());
        }

        System.out.println("========onMessageEvent=========== \n " + message + "\n" );
    }

  /**
     * 将电子面单写入到文件,文件格式为Pdf
     * @param response
     */
    private void sfPushCloudPrintWaybills(SyncTradeResponse response )  {
        try {

            Base64.Decoder decoder = Base64.getDecoder();
            SFCloudPrintWaybill sfCloudPrintWaybill = JSON.parseObject(response.getData(), SFCloudPrintWaybill.class);
            // 在下面单请求传入custom_data时,会原样返回过来
            System.out.println("customData:" + sfCloudPrintWaybill.getCustomData());
             System.out.println("运单号:" + sfCloudPrintWaybill.getWaybillNo());
            String fileName =  sfCloudPrintWaybill.getFileName();
            File file = new File(fileName);
            OutputStream os = new FileOutputStream(file,true);
            byte[] data = decoder.decode(sfCloudPrintWaybill.getContent());
            os.write(data, 0, data.length);
            os.flush();
            os.close();
            System.out.println("生成文件成功");

        } catch (Exception ex) {
            ex.printStackTrace();
        } 

    }

生成的电子面单pdf文件示例

3 返回参数response.getData说明

{
    "areaNo": "1",
    "content" : "这里是base64编码的文件内容",
    "fileName": "ZLXXKWh_qPhFpmyDxXPmH0X1cqAi_SF7444432055982_fm_76130_standard_ZLXXKWh_1_1_1.pdf",
    "fileType": "pdf",
    "pageNo": "1",
    "seqNo": "1",
    "templateCode": "fm_76130_standard_ZLXXKWh",
    "waybillNo": "SF7444432055982",
    "custom_data": "112233ks"
}
3.1 字段说明
# 属性名 必填 默认值 描述
1 content 文件数据,base64.encode后的数据
2 waybillNo 顺丰运单号(子母单为子单号)
3 fileName 文件名(规则:clientCode+””+requestID+””+templateCode+””+单号+””+业务数据列表序号+””+联号+””+页号)
4 fileType 文件类型(pdf)
5 seqNo 面单序号(批量打印场景,为documents的序号)
6 areaNo 联编号(大客户面单为固定值:1)
7 pageNo 每联的页号(大客户面单为固定值:1)
8 templateCode 模板编码
9 custom_data 请求调用“电子面单云打印”接口时传入的值,原样返回
文档更新时间: 2021-09-07 11:08   作者:admin