先看图
利用快递鸟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