元旦三天假期,实现一个电商退单管理系统【一】
一、背景
某电商快速发展,每日发单量比较大,购买电商ERP进行进销存管理。但每日退货也有几百单甚至更多,电商ERP系统对订单管理得心应手,处理效率非常高,但对于退货流程管理却相对比较简单,只是一个简单的录入查询,无法对退单进行全生命周期监控。淘宝、拼多多等平台客户发起退货请求,退货单到底有没有返回到仓库,中间可能出现很多意外情况,如快递丢单、客户压根没有退、超时等多种情况,更有部分客户因购买过程不顺心,退货选择退回空包、或者随便放些别的东西等。
电商老板向ERP厂商提出该部分需求,希望能追踪退货流程,对快递和客户进行分析查询,对因快递公司责任造成的,需要向快递公司索赔。但电脑ERP相对成熟稳定,厂商不愿为某一个电商而更改他们的系统。同时该退货系统与ERP关联性不大,遂电商老板计划建立一个独立的系统进行退货流程管理。
二、需求分析
系统首先获取预退货清单,该清单可以由客服录入,也可以通过各类电商平台接口获取,然后快递单退回入库时,通过扫码枪扫码入库,入库单号与预退货单进行匹配,如果匹配成功,则进入拆包检验流程,仓库对拆包结果上传,可以正常完结该订单,也可以录入拆包异常原因,如退回空包、寄回货物不对等。
最后,由客服人员对订单进行确认关闭或导出异常赔付清单。对于长期未匹配成功的订单自动进入超时订单,客服可以将超时订单设置为协商不退货,或丢包。电商管理人员需要登录后台,查询各类报表,对快递公司和退货频物品,退货成功率等进行考察,进一步提升产品销售空间,减少不必要的支出,提升利润。整个流程如下图:
根据以上需求,将整个系统分成几个部分:
(一) 仓库电脑端,负责对退货入库的订单进行扫码,提交到服务器,并打印当日流水给快递员,防止后期索赔纠纷。
(二) 接口端,负责将仓库扫码结果接收入库。该部分业务逻辑尽量简单,只需要对错单、重复单等进行额外的判断后,直接入退货表即可。
(三) 后台服务,负责预退货单与退货单进行匹配、丢包单与入库单匹配、将超过一定时间的预退货单置为超时等后台任务。
(四) 后台管理系统WEB端,仓库管理员对入库单拆包检验结果进行录入,客服负责预退货单采集录入、拆包正常订单完成归档、异常订单查询导出、赔付信息录入、超时订单处理等。电商公司管理人员则可以登录查询各类统计报表,进行决策分析。
三、技术框架
(一)仓库电脑端,由于需要监听扫码枪输入,肯定需要写一个后台服务或托盘程序,看着仓库里的几台windows操作系统,C#肯定最拿手了,决定使用wpf写一个监听程序,与服务端进行通讯。数据暂存在本地sqlite数据库。本来想研究一下SQL Server Compact的,微软的帮助文档写的真心混乱,网上资料也比较少,赶时间就用了SQLite。我们知道SQLite默认是没有用户认证的,以前写android时曾经研究过一个sqlcipher,可以实现用户认证,保护本地数据安全。
(二)接口端,由于工期非常紧,加之需求变化可能比较多,服务端我用了PHP,使用thinkphp框架,以前写的一个简单的权限管理可以直接拿来用,为了赶时间,业务逻辑、数据库curd全部放到controller里了,没有用model。从网上下的bootstrap模板继续用。
(四)后台服务,客户服务器在阿里云,是一台centos服务器,tp的定时任务感觉像是假的。决定用springboot写一个jar包,扔到服务器上后台刷时钟。
(五)后台WEB端,与接口服务共用,用的tp3.2。controller+view全部搞定。重复造了不少轮子。
(六)数据库,使用轻量级mysql,数据库建模使用powerdesign。
嗯,差不多了,就用了这么多技术,客户不需要手机端,否则我还可以卖弄一下野生程序员MIS全栈能力。
WPF |
四、界面预览
客户端登录
客户端选择快递
客户端扫码监听界面
WEB后台首页
预退货单管理界面
已完结订单统计查询
丢包单统计查询