最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

利用4GL查询快递信息,集成到ERP

开发相关 bron1984 来源:苏州绿软信息科技 3420浏览

先看图

利用快递鸟api接口实现,目前官网api已实现自动根据单号识别快递公司,具体可看官网说明,以下代码不包含这块:

添加 util.os 到 $FGLDIR/lib中覆盖(T100无需这步)

IMPORT com
IMPORT util
IMPORT JAVA java.net.URLEncoder
IMPORT JAVA java.lang.String
       
DATABASE ds 
GLOBALS "../../../tiptop/config/top.global"
       
DEFINE exp_company      STRING
DEFINE exp_no           STRING
DEFINE cb               ui.ComboBox
DEFINE cust_rec RECORD
       EBusinessID      STRING,
       ShipperCode      STRING,
       Success          BOOLEAN,
       LogisticCode     STRING,
       State            STRING,
       Traces DYNAMIC ARRAY OF RECORD
              AcceptTime    STRING,
              AcceptStation STRING
              END RECORD
              END RECORD
                     
MAIN
       
       
    IF (NOT cl_user()) THEN                                #預設部份參數(g_prog,g_user,...)
       EXIT PROGRAM                                        #切換成使用者預設的營運中心
    END IF                  
                           
    WHENEVER ERROR CALL cl_err_msg_log                     #遇錯則記錄log檔
                           
    IF (NOT cl_setup("CZZ")) THEN                          #抓取權限共用變數及模組變數(g_aza.*...)
       EXIT PROGRAM                                        #判斷使用者執行程式權限
    END IF
       
    OPEN WINDOW p_express  WITH FORM "czz/42f/p_express.42f"
            ATTRIBUTE (STYLE = "p_express" CLIPPED)   
       
    CALL cl_ui_init()
           
    LET cb = ui.ComboBox.forName("exp_company") 
    CALL cb.addItem('EMS','EMS')
    CALL cb.addItem('YTO','圆通速递')
    CALL cb.addItem('ZTO','中通速递')
    CALL cb.addItem('YD','韵达快递')
    CALL cb.addItem('ST','速通物流')
    CALL cb.addItem('STO','申通快递')
    CALL cb.addItem('SF','顺丰快递')
    CALL cb.addItem('BTWL','百世物流')
    CALL cb.addItem('HTKY','百世汇通')
    CALL cb.addItem('FAST','快捷速递')
    CALL cb.addItem('HFWL','汇丰物流')
    CALL cb.addItem('HHTT','天天快递')
    CALL cb.addItem('HHKD','华航快递')
    CALL cb.addItem('DBL','德邦')
    CALL cb.addItem('GHX','挂号信')
    CALL cb.addItem('7TLSWL','7天连锁物流')
    CALL cb.addItem('AJ','安捷快递')
    CALL cb.addItem('ANE','安能物流')
    CALL cb.addItem('AXD','安信达快递')
    CALL cb.addItem('BALUNZHI','巴伦支快递')
    CALL cb.addItem('BFDF','百福东方')
    CALL cb.addItem('BKWL','宝凯物流')
    CALL cb.addItem('BQXHM','北青小红帽')
    CALL cb.addItem('BSWL','邦送物流')
    CALL cb.addItem('CCES','CCES快递')
    CALL cb.addItem('CITY100','城市100')
    CALL cb.addItem('COE','COE东方快递')
    CALL cb.addItem('CSCY','长沙创一')
    CALL cb.addItem('CXWL','传喜物流')
    CALL cb.addItem('DCWL','德创物流')
    CALL cb.addItem('DHWL','东红物流')
    CALL cb.addItem('DSWL','D速物流')
    CALL cb.addItem('DTKD','店通快递')
    CALL cb.addItem('DTWL','大田物流')
    CALL cb.addItem('DYWL','大洋物流快递')
    CALL cb.addItem('FBKD','飞豹快递')
    CALL cb.addItem('FEDEX','FedEx联邦快递')
    CALL cb.addItem('FHKD','飞狐快递')
    CALL cb.addItem('FKD','飞康达')
    CALL cb.addItem('FYPS','飞远配送')
    CALL cb.addItem('FYSD','凡宇速递')
    CALL cb.addItem('GDEMS','广东邮政')
    CALL cb.addItem('GDKD','冠达快递')
    CALL cb.addItem('GKSD','港快速递')
    CALL cb.addItem('GSD','共速达')
    CALL cb.addItem('GTKD','广通速递')
    CALL cb.addItem('GTO','国通快递')
    CALL cb.addItem('GTSD','高铁速递')
    CALL cb.addItem('HBJH','河北建华')
    CALL cb.addItem('HLKD','韩润物流')
    CALL cb.addItem('HLWL','恒路物流')
    CALL cb.addItem('HMJKD','黄马甲快递')
    CALL cb.addItem('HMSD','海盟速递')
    CALL cb.addItem('HOAU','天地华宇')
    CALL cb.addItem('hq568','华强物流')
    CALL cb.addItem('HQKY','华企快运')
    CALL cb.addItem('HSWL','昊盛物流')
    CALL cb.addItem('HTWL','户通物流')
    CALL cb.addItem('HXLWL','华夏龙物流')
    CALL cb.addItem('HYLSD','好来运快递')
    CALL cb.addItem('JD','京东快递')
    CALL cb.addItem('JGSD','京广速递')
    CALL cb.addItem('JIUYE','九曳供应链')
    CALL cb.addItem('JJKY','佳吉快运')
    CALL cb.addItem('JLDT','嘉里大通')
    CALL cb.addItem('JTKD','捷特快递')
    CALL cb.addItem('JXD','急先达')
    CALL cb.addItem('JYKD','晋越快递')
    CALL cb.addItem('JYM','加运美')
    CALL cb.addItem('JYSD','久易快递')
    CALL cb.addItem('JYWL','佳怡物流')
    CALL cb.addItem('KLWL','康力物流')
    CALL cb.addItem('KTKD','快淘快递')
    CALL cb.addItem('KYDSD','快优达速递')
    CALL cb.addItem('KYWL','跨越速递')
    CALL cb.addItem('LB','龙邦快递')
    CALL cb.addItem('LBKD','联邦快递')
    CALL cb.addItem('LHKD','蓝弧快递')
    CALL cb.addItem('LHT','联昊通速递')
    CALL cb.addItem('LJD','乐捷递')
    CALL cb.addItem('LJS','立即送')
    CALL cb.addItem('MB','民邦速递')
    CALL cb.addItem('MDM','门对门')
    CALL cb.addItem('MHKD','民航快递')
    CALL cb.addItem('MLWL','明亮物流')
    CALL cb.addItem('MSKD','闽盛快递')
    CALL cb.addItem('NEDA','能达速递')
    CALL cb.addItem('NJSBWL','南京晟邦物流')
    CALL cb.addItem('PADTF','平安达腾飞快递')
    CALL cb.addItem('PXWL','陪行物流')
    CALL cb.addItem('QCKD','全晨快递')
    CALL cb.addItem('QFKD','全峰快递')
    CALL cb.addItem('QRT','全日通快递')
    CALL cb.addItem('RFD','如风达')
    CALL cb.addItem('RLWL','日昱物流')
    CALL cb.addItem('SAD','赛澳递')
    CALL cb.addItem('SAWL','圣安物流')
    CALL cb.addItem('SBWL','盛邦物流')
    CALL cb.addItem('SDHH','山东海红')
    CALL cb.addItem('SDWL','上大物流')
    CALL cb.addItem('SFWL','盛丰物流')
    CALL cb.addItem('SHLDHY','上海林道货运')
    CALL cb.addItem('SHWL','盛辉物流')
    CALL cb.addItem('SJWL','穗佳物流')
    CALL cb.addItem('STSD','三态速递')
    CALL cb.addItem('SURE','速尔快递')
    CALL cb.addItem('SXHMJ','山西红马甲')
    CALL cb.addItem('SYJHE','沈阳佳惠尔')
    CALL cb.addItem('SYKD','世运快递')
    CALL cb.addItem('THTX','通和天下')
    CALL cb.addItem('TSSTO','唐山申通')
    CALL cb.addItem('UAPEX','全一快递')
    CALL cb.addItem('UC','优速快递')
    CALL cb.addItem('WJWL','万家物流')
    CALL cb.addItem('WTP','微特派')
    CALL cb.addItem('WXWL','万象物流')
    CALL cb.addItem('XBWL','新邦物流')
    CALL cb.addItem('XFEX','信丰快递')
    CALL cb.addItem('XGYZ','香港邮政')
    CALL cb.addItem('XLYT','祥龙运通')
    CALL cb.addItem('XYT','希优特')
    CALL cb.addItem('YADEX','源安达快递')
    CALL cb.addItem('YBJ','邮必佳')
    CALL cb.addItem('YCWL','远成物流')
    CALL cb.addItem('YDH','义达国际物流')
    CALL cb.addItem('YFEX','越丰物流')
    CALL cb.addItem('YFHEX','原飞航物流')
    CALL cb.addItem('YFSD','亚风快递')
    CALL cb.addItem('YJSD','银捷速递')
    CALL cb.addItem('YLSY','亿领速运')
    CALL cb.addItem('YMWL','英脉物流')
    CALL cb.addItem('YSH','亿顺航')
    CALL cb.addItem('YSKY','音素快运')
    CALL cb.addItem('YTD','易通达')
    CALL cb.addItem('YTFH','一统飞鸿')
    CALL cb.addItem('YTKD','运通快递')
    CALL cb.addItem('YXWL','宇鑫物流')
    CALL cb.addItem('YZPY','邮政平邮/小包')
    CALL cb.addItem('ZENY','增益快递')
    CALL cb.addItem('ZHQKD','汇强快递')
    CALL cb.addItem('ZJS','宅急送')
    CALL cb.addItem('ZMKM','芝麻开门')
    CALL cb.addItem('ZRSD','中睿速递')
    CALL cb.addItem('ZTE','众通快递')
    CALL cb.addItem('ZTKY','中铁快运')
    CALL cb.addItem('ZTWL','中铁物流')
    CALL cb.addItem('ZTWY','中天万运')
    CALL cb.addItem('ZWYSD','中外运速递')
    CALL cb.addItem('ZYWL','中邮物流')
    CALL cb.addItem('ZZJH','郑州建华') 
       
    CALL p__express_menu() 
           
    CLOSE WINDOW p_express
END MAIN

 

FUNCTION p__express_menu()
       
       
    WHILE TRUE
        DIALOG ATTRIBUTES(UNBUFFERED)
           INPUT BY NAME exp_no,exp_company ATTRIBUTES(WITHOUT DEFAULTS) 
       
                    
           END INPUT
       
           DISPLAY ARRAY cust_rec.Traces TO s_cust_rec.* 
       
                  
           END DISPLAY
       
           ON ACTION query
              ACCEPT DIALOG
                     
       
           ON ACTION CLOSE
              LET INT_FLAG = TRUE
              EXIT DIALOG   
       
           ON ACTION exit
              LET INT_FLAG = TRUE
              EXIT DIALOG    
                     
        END DIALOG
       
        IF INT_FLAG THEN
           CLOSE WINDOW p_express
           LET INT_FLAG = 0
           EXIT PROGRAM
        ELSE
           CALL getExpress()   
        END IF
               
   END WHILE
           
END FUNCTION

 

FUNCTION getExpress()
DEFINE req              com.HTTPRequest
DEFINE resp             com.HTTPResponse
DEFINE EBusinessID      STRING
DEFINE AppKey           STRING
DEFINE ReqURL           STRING
DEFINE requestData      STRING
DEFINE dataSign         STRING
DEFINE datas            STRING
DEFINE requestData_url  STRING
DEFINE dataSign_url     STRING
DEFINE xmlstr           STRING 
DEFINE tot              INT
DEFINE tot_day          INT
DEFINE tot_hour         INT
DEFINE tot_minute       INT
DEFINE AcceptTime_a     varchar(100) 
DEFINE AcceptTime_b     varchar(100)
DEFINE jsonObj          util.JSONObject
       
       
   LET EBusinessID = "123456"   #快递鸟ID
   LET AppKey = "8f3a803e-7782-44ef-b864-26f4d7f2f932" #快递鸟AppKey
   LET ReqURL = "http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx"
       
   LET requestData= "{'OrderCode':'','ShipperCode':'"||exp_company||"','LogisticCode':'"||exp_no||"'}"
       
#   "<?xml version="1.0" encoding="utf-8" ?>",
#                           "<Content>",
#                           "<OrderCode></OrderCode>",
#                           "<ShipperCode>YTO</ShipperCode>",
#                           "<LogisticCode>560319921471</LogisticCode>",
#                           "</Content>"
       
   LET requestData_url =  java.net.URLEncoder.encode(requestData,"UTF-8")     
   LET dataSign = encrypt(requestData||AppKey)
   LET dataSign_url = java.net.URLEncoder.encode(dataSign,"UTF-8")
   LET datas = "RequestData=",requestData_url,
               "&EBusinessID=",EBusinessID,
               "&RequestType=1002",
               "&DataSign=",dataSign_url,
               "&DataType=2"
                                  
   TRY
     LET req = com.HTTPRequest.Create(ReqURL)
     CALL req.setTimeOut(3000)
     CALL req.setMethod("POST") 
     CALL req.doFormEncodedRequest(datas, TRUE)     
     LET resp = req.getResponse()
     IF resp.getStatusCode() != 200 THEN
       CALL cl_err("","HTTP Error ("||resp.getStatusCode()||") "||resp.getStatusDescription(),1)
     ELSE
       LET xmlstr = resp.getTextResponse()
       #LET   doc = resp.getXmlResponse() 
       #DISPLAY   "HTTP XML Response is : ",xmlstr
     END IF
   CATCH
     CALL cl_err("","ERROR :"||STATUS||" ("||SQLCA.SQLERRM||")",1) 
   END TRY
       
   CALL util.JSON.parse(xmlstr, cust_rec)
   LET tot_day = 0
   LET tot_hour = 0
   LET tot_minute = 0
   IF cust_rec.Traces.getLength() > 0 THEN
       LET AcceptTime_a = cust_rec.Traces[cust_rec.Traces.getLength()].AcceptTime
       LET AcceptTime_b = cust_rec.Traces[1].AcceptTime
       SELECT (to_date(AcceptTime_a,'yyyy-mm-dd hh24-mi-ss')-to_date(AcceptTime_b,'yyyy-mm-dd hh24-mi-ss'))*24*60*60 INTO tot FROM dual
              
       LET tot_day = IIF(FGL_DECIMAL_TRUNCATE(tot/86400,0)>0,FGL_DECIMAL_TRUNCATE(tot/86400,0),0)
              
       LET tot_hour = IIF(FGL_DECIMAL_TRUNCATE((tot - tot_day*86400)/3600,0)>0,
                          FGL_DECIMAL_TRUNCATE((tot - tot_day*86400)/3600,0),0)
                                 
       LET tot_minute = IIF(FGL_DECIMAL_TRUNCATE((tot - tot_day*86400 - tot_hour*3600)/60,0)>0,
                            FGL_DECIMAL_TRUNCATE((tot - tot_day*86400 - tot_hour*3600)/60,0),0)
       
       LET cust_rec.Traces[cust_rec.Traces.getLength() + 1].AcceptTime = "已耗时"||tot_day||"天"||tot_hour||"小时"||tot_minute||"分"
   ELSE
       LET cust_rec.Traces[cust_rec.Traces.getLength() + 1].AcceptTime = "无物流信息,请确认单号"
   END IF                         
                      
   DISPLAY cust_rec.LogisticCode TO LogisticCode
   DISPLAY cust_rec.State TO State
       
END FUNCTION
       
FUNCTION encrypt(datastr)
DEFINE md5str      varchar(4000) 
DEFINE base64str   varchar(4000)
DEFINE datastr     varchar(4000) 
DEFINE java_str    java.lang.String
       
    LET java_str = java.lang.String.create(datastr)
    LET datastr = java.lang.String.create(java_str.getBytes("gbk"),"utf-8")
    SELECT lower(MD5(datastr)) INTO md5str FROM dual
    SELECT base64_lock(md5str) INTO base64str FROM dual
    RETURN base64str
           
END FUNCTION

 

转载请注明:赫非域 » 利用4GL查询快递信息,集成到ERP