本人供职于某电商公司的物流部门,负责相关物流信息系统的开发,其中最重要的系统就是为了对接各大快递公司,从各家快递公司获取订单的物流轨迹。刚开始公司为了省事是通过付费方式统一从快递100获取各大家物流公司的物流轨迹,但由于订单数量比较大,每个月都要支付一笔不小的费用给快递100,费用是不超过10万则每单0.1元,超过则每单0.05元,系统每天调用快递100的单量大概是100万,这样每天就需要支付5.5万的费用。为了节省费用,选择直接对接各大快递公司,这样每年可以为公司省下2000万的费用。
该物流系统具有以下特点
1.对接的快递公司数量多
目前主流的快递公司有差不多30家,包括申通、圆通、汇通、中通、邮政等快递公司,商家发货单量最多的快递公司是四通一达。
2.各家快递公司的接口各异
有些是使用JAVA接口,比如京东,但大部分是使用HTTP接口,比如申通。接口的返回格式也不同,有些是使用XML格式数据,大部分是使用JSON字符串。物流轨迹的状态不一样,物流轨迹的状态主要有揽收、在途、送货、签收、拒收、异常件。但有些快递公司是没有揽收、拒收或异常件的,需要对物流轨迹的状态进行统一转换。有些快递公司是没有轨迹的状态,只有描述,这样我们就需要从描述中识别出状态,由于各种状态不统一,有些随意,所以经常会出现错误识别的问题,比如轨迹是拒收状态的,但我们识别成签收,或签收状态我们识别成拒收,这会影响业务,比如财务退款就是根据拒收判断的。为了解决这种频繁的错误识别问题,我们使用JS脚本来识别轨迹状态,再把JS脚本放入JAVA中的JS引擎里面执行,这样系统升级时不需要频繁启动,只需要更新数据库里