二次开发ERP集成快递鸟电子面单

近日接单二次开发ERP增加电子面单的活儿,最开始选择了快递100、快递鸟和菜鸟裹裹。菜鸟裹裹流程复杂,首先被淘汰。而快递100使用java 8+的代码而客户ERP开发年代较早版本仅为1.6,会导致系统版本升级和大量函数重写,开发成本高昂周期不可控,且需配备专用打印设备。而快递鸟的API代码无关系统版本,不会导致老ERP连带系统版本升级,相对开发成本更容易接受。

使用厂家DEMO很快就调试出了相关数据,Json发起编码请求包,服务器再返回Json解码,使用Google的Gson解码后封包到对象。
“PrintTemplate”: “<!DOCTYPE html>…”,
“EBusinessID”: “test1652015”,
“UniquerRequestNumber”: “327ceb7c-XXXXXXXXXXXXXX”,
“ResultCode”: “100”,
“Reason”: “成功”,
“Success”: true”
返回报文已经自带打印模板,这样对打印终端就没有任何限制,企业可以使用现成的设备打印。返回消息后将返回的PrintTemplate存储到文件,就可以实现面单的多次打印。

然而真正的电子面单开发根本写不了多久,最坑的还是ERP配套,这也是二次开发最耗时费力的部分。

因为快递鸟要求传递必须到区一级,第一步要解决的就是精确到区一级的数据,在网上找到精确的区一级数据后发现麻烦接踵而至。因为原ERP系统只精确到市一级,且很多名称未加上“市”,更麻烦的是,原有系统的省市ID不能动,ERP系统的订单统计、门店、门店隶属关系和门店绑定人员、运费计算都依赖该ID,所以直接用新表替换旧表这条路还走不通。只能先用调试数据库完善数据,再把新表的区一级数据做插入,然后汇总成完善的三级地区表。
1、首先得把省一级名称统一,方便跟精确数据库匹配数据,有些加了自治区,行政区的名称手工改成一致,这样省一级先保证跟新数据的名称统一。
2、第二步就得把排除直辖市以后,目前所有的二级地区名称加上“市”,然后就好用找到的精确数据库做同步增区。
update X set X=X||’市’ where level=2 and id in(select id from X where area_name!=’北京’ and area_name!=’天津’….);
这样ERP旧库中省市一级名称就同步了,为给快递了传三级取值方便。
3、接下来还得为ERP地区数据库增加一个全名:”浙江省,台州市,路桥区”,于是数据库增加字段:merger_name。
4、再用关联查询比对二级名来生成插入旧库插入语句:
select ‘INSERT INTO X (parent_id, area_name, merger_name) VALUES (‘||b.id||’,”’||a.area_name||”’,”’||a.merger_name||”’);’ from NEW_area a,X b where b.parent_id>0 and a.merger_name like ‘%’||b.area_name||’,’||’%’ and a.merger_name NOT LIKE ‘北京%’ and a.merger_name NOT LIKE ‘天津%’ ….
最后执行生成的插入SQL指令,最终完成扩区。

5、原系统门店模块必须升级改造,从二级选单改为三级选单,重写原有的javascript选单。并且为数据库的门店表增加县一级id字段,因此需要更新添加门店和门店更新页。同时实现未选择区县一级的下单拦截和三级显示。


6、门店下单模块考虑加盟店和淘宝店发货并非用门店自身地址,因此需要同步增加三级联动,且限制非直辖市以外的地区不选区县下单。

如果选择加盟店下单,还需要考虑加盟店地址不完善的情况,提示门店先完善地址再下单,未完善地址的门店不允许被选中。


7、订单模块需要在下单时存储门店的地区全程,方便为快递鸟传值,所以订单表需要增加merger_name字段。同时因为电子运单的重量滞后性,首次提交无重量的电子运单不改变订单状态为已发货或缺货状态。


8、订单显示页面,需要增加客服点击电子运单发货,实现订单跟踪记录和扣费的插入。同时原有快递可达城市校验,需要将电子单跟原有实体单合并。

9、因为电子单是自动生成单号,所以选择后需要屏蔽前端运单输入,只保留运费和补货选项。同时升级地区数据库后的名称改变,还需同步将到达省市的运费数据重新添加。原有选省,输入市名的方式也需改为二级联动选单。

10、最后通过前端用户按下物流提交按钮,系统后台增加代码完成电子运单的传递、扣费、写单,并写入物流跟踪消息。订单无区级明细的老订单,不允许使用电子面单提交。

11、界面实现如果用户选择电子面单,做完快递到达省份校验通过后,就屏蔽单号的前端输入项,使用系统自动生成的单号填入。选择非电子单则取消单号输入的屏蔽。

12、订单流转表为区分是否为电子面单,需要增加快递鸟的唯一标识UniquerRequestNumber字段。这样就可以区分哪些是电子面单,那些是纸质面单。而电子面单就可以增加跳转链接到系统保存好的打印样式页。如果存在同订单号,同公司的信息被客服提交,需要系统确认只扣费一次。因系统订单号对应一家快递公司只生成一次运单号,因此需要为订单表增加计数器,点一次打印计数器增加1,并把累加数字追加到传递给快递公司的订单号中,达成一个订单多次生成运单号的功能。

13、同时需求还得满足先生成电子单,后填相同快递单和重量再计费的方式。第一次插入电子快递单只要重量为零就不扣费,有重量以后再计费。

14、因快递公司模板部分未插入HTML标记,保存后的模板打开就显示乱码,因此需要判断HTML头部是否有UTF-8编码指定,没有就插入标记后再写入HTML文件。最后根据打印机调整TemplateSize传递参数以适合尺寸。

15、为避免订单表中未有merger_name字段填充的订单使用电子运单报错,需要限制ID大于部署日期才允许使用电子面单。

16、中心发货,订单明细,订单查询,订单列表,订单打印,导出,订单老打印模版所有涉及地址的部分,都改为merger_name加地址信息输出。

发表您的评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注