涉及领域:小程序,充电桩,Workerman,协议文档解析,余额扣费处理
充电流程:
1. 小程序上扫描桩上的枪二维码,进入启动充电页面,点击立即启动,生成充电订单,服务器向硬件下发启动指令,硬件收到后执行对应操作,并将操作结果反馈回服务器,服务器收到启动成功的应答后进入充电详情页;
2. 充电过程中,硬件每隔几秒会上报状态信息包服务器收到后会存在数据库中;
3. 正常结束充电有两种【手动点击结束充电和达到 SOC 值后会自动结束充电】,手动结束时服务器会向硬件下发结束指令,等待硬件处理后返回结果,服务器收到结束应答后更新订单信息并结算扣款;
4. 用户可以对已结算的订单进行二次结算【使用优惠券结算】,优惠券减免的金额将会原路返还给用户的余额
5. 用户结束充电后一段时间内可以免费插枪,超时设定时间将进行额外收费,每 30 分钟收费 5 元
遇到的问题:
1. 硬件问题:
① 结束充电时服务器收不到硬件方发来的结束指令,导致用户订单一直是充电中的状态,解决方案:如果没有收到结束指令,将以硬件上报上来的最后一次有效数据作为该订单的充电数据;
② 启动充电后,硬件存在不应答充电结果的情况,没应答则该订单是未启动状态,解决方案:在充电状态信息包里判断如果该订单状态为未启动,则改成充电中;
2. 程序问题:
① Excel 导出百万订单数据量,一次性导出将会超时,解决方案:采用 redis 消息队列及定时任务,每分钟处理 1000 条数据,最终一次性导出到 Excel 表格