基于微信平台的共享存储柜系统的设计与实现

赵升枝 仲梁维
摘 要:随着信息技术、网络通信及存储硬件设施的飞速发展,使得社会资源的共享成本越来越低,商业化的实现成为一种可能。因此,在出行时,存在一个可以短期内存储随身物品的共享存储柜无疑会给用户带来极大便利。鉴于当前情况,采用Java企业级框架搭建一个基于微信公众号的共享存储柜平台。系统采用Eclipse开发工具,MySQL数据库,Spring Boot框架进行搭建。系统经过测试使用,运行稳定,实现了存储柜的共享理念,提高了用户出行的便利性。
关键词:共享;存储柜;微信公众号;Java;Spring Boot
中图分类号:TP399 文献标识码:A
Abstract:With the rapid development of information technology,network communication and storage hardware,sharing social resources becomes a possibility.Therefore,if there is a shared storage cabinet that can store objects for a short time when traveling,it will undoubtedly bring great convenience to users.In view of the current situation,the Java enterprise-level framework is adopted to build a shared storage platform based on WeChat public platform.The system is built with Eclipse development tools,MySQL database and Spring Boot framework.The system has been tested and used,running steadily,realizing the sharing concept of storage cabinets,and improving the convenience of user trips.
Keywords:share;storage cabinet;WeChat public platform;Java;Spring Boot
1 引言(Introduction)
近几年,随着计算机技术的飞速发展,及硬件设备的完善,可以处理及保存的的数据越来越多,使得资源共享成为一个可能,并且成为了一种必然趋势。资源的共享可以使社会资源实现统一调配,使得社会资源得到更加高效、更加细粒度的利用,并且使得社会生活更加便利。
在一些人口密集、或用户停留时间比较长的地方,比如地铁口、大型的商场门口、公园、游乐园附近、步行街口,或者在小区、公司等常住位置,具有很强的临时存储需求。共享的存储柜[1],可以作为快递柜使用,节省快递等待时间成本,也可以为游客、居民、行人提供临时存放物品的服务。节省了大量人力成本,具有广泛的运用场景。
本文采用B/S服务,通过用Java微服务架构Spring Boot[2]搭建后台服务系统,实现存储柜共享平台的控制、管理、运营。采用MySQL数据库[3]作为数据本地持久化工具。通过微信公众号作为流量入口,为用户提供便利的使用入口实现存储柜的共享。
2 共享存储柜平台技术分析(Technical analysis of shared storage cabinet platform)
2.1 后台服务系统技术分析
在基于web开发的后台服务系统中,Java语言和Linux[4]系统一直是最广泛最稳定的开发
语言和运行服务器的组合,在运行效率和安全性方面有着与生俱来的优势。在存储柜共享使用中,面临高并发、高访问量等严苛的性能及安全要求,Java企业级系统框架则是解决此类问题的优先解。
Spring Boot是基于Spring的Java微服务框架,适合敏捷开发。首先Spring Boot利用Maven[5]实现依赖管理,将系统依賴Jar包通过配置式导入。同时由于该框架依然具有Spring非入侵式编程、控制反转的特点,使系统的可移植性、可复用性、扩展性得到极大提升。
2.2 流量入口技术分析
现如今生活节奏加快,使得便捷、快速的应用共容易得到青睐。因此用微信公众号平台[6]作为流量入口。一方面微信有着庞大的用户基数,可以更加快速进行推广,积累用户;另一方面基于微信用户系统实现平台用户识别,尽可能简化用户操作流程,提高用户体验度。
3 共享存储柜平台整体设计(The overall design of the shared storage cabinet platform)
3.1 流程设计
后台服务通过微信公众号作为用户标识,进行业务处理。核心流程分为存储流程与取件流程。
存储过程中当前用户在客户终端选取存储柜体类型,生成包含终端设备号、用户手机号、柜体信息的二维码。用户扫码支付,服务器处理支付信息,当支付成功时向客户终端推送消息,打开柜门,用户存放物品。
在取件过程中,客户终端机生成带设备号信息的取件二维码。用户扫码访问服务器,服务器查询当前设备当前用户的使用信息,向客户端推送开柜信息,打开柜门,用户取出物品。
3.2 功能模块设计
平台系统共包括二维码模块、订单模块、柜体分配模块、支付模块、异常检测模块、报修模块、消息推送模块等功能模块。根据此核心模块提供相关API接口实现客户终端机服务。整个后台服务系统部署在阿里云服务器上。同时系统采用MAVEN[4]进行依赖管理,使项目管理模块化便于项目的搭建及扩展。以下简述各模块核心功能。
(1)二维码模块。用于负责根据用户订单信息动态生成包含设备、用户信息、所选柜体信息等的二维码,是平台核心功能的入口。
(2)订单模块。该模块为平台核心模块,主要分为当前业务订单、完成业务订单、支付订单三部分组成。当前业务订单是用户在使用柜体过程中,从存储到取件整个过程的订单记录;完成业务订单为业务结束后的订单记录;支付订单为用户在业务过程中产生的支付行为而生成的订单记录。三个部分在业务过程中相互依存完成整个业务订单过程。
(3)柜体分配模块。根据当前位置当前时段柜体信息,及用户需求信息进行柜体分配,完成对客户终端实体的智能操作。
(4)支付模块。根据订单信息完成与微信支付接口对接,实现业务支付功能。
(5)异常检测模块。该模块用于检测业务过程中订单信息的异常,根据返回异常的种类采取对应措施保证系统的正常运行。
(6)报修模块。针对于客户终端的服务,提供用户与服务器之间的联系通道,便于在极端的情况下,系统未能检测异常,由用户直接进行报修处理。
(7)消息推送模块。用于将服务器处理过的服务信息,如柜体分配,异常处理等消息推送客户机终端,实现具体服务。
3.3 数据实体设计
4 共享存储柜平台模块实现(Shared storage cabinet platform module implementation)
4.1 二维码模块实现
二维码模块利用谷歌推出的二维码工具google-zxing实现。提供二维码生成API接口,根据用户信息生成二维码图片,并将文件数据流传到客户终端。
4.2 订单模块实现
订单模块分为当前业务订单,完成业务订单,及支付订单。当用户扫描开箱二维码后访问后台服务,服务器访问柜体分配模块选取合适的柜体信息,生成该用户的当前业务订单,同时生成支付订单。当用户调用支付接口,支付成功之后,回调服务器后续接口,更新支付订单状态及当前业务订单状态,最后将信息通过信息推送模块将信息推送客户终端。
4.3 柜体分配模块
柜体分配模块主要分柜体显示和柜体分配两个功能。
(1)柜体显示。根据终端机编号device_id,查询符合该地点投放的各尺寸柜体使用情况,并在每次分配或业务结束后重新显示。
(2)柜体分配。根据用户所在终端机编号device_id及所选柜体尺寸规格,在柜体信息数据里搜索符合要求柜体。若存在,则将终端机编号所需柜体尺寸信息生成开箱二维码。
4.4 支付模块
支付业务通过微信支付实现。支付模块主要实现微信支付API的对接。
(1)支付信息参数生成。对接微信支付API需要特定的参数。为提高系统复用性将支付参数生成一个简单的JavaBean对象。根据用户扫描二维码的信息,生成支付参数对象。
(2)签名生成。为保证支付安全,需要确认收到的订单信息与发送信息一致,所有需要将所传参数根据一定规则生成一个数字签名在接收参数时进行验证。根据微信文档签名要求,将支付参数对象转为符合规定的参数字符串,经过MD5加密,生成签名参数。
(3)支付功能。将生成的参数字符串以UTF-8编码,以post方式访问微信支付接口,同时将支付订单信息放入数据库。
(4)支付回调功能。支付完成后根据传递的回调接口,访问支付回调功能。根据回调信息成功与否更新支付订单状、业务订单状态,并推送相应的成功失败H5页面。
4.5 异常检测模块
异常检测分为惰性检测与积极检测两个主要核心。
(1)惰性检测。在用户使用柜体后回调检测接口,检测业务订单过程有无异常,若有异常则系统冻结该柜体。
(2)积极检测。系统启动时同时启动一个servlet容器,通过ScheduledExecutorService工具类执行一个周期为1分钟的定时监测任务,检测业务过程有无异常。
4.6 报修模块
在系统发生异常且异常检测模块并未检测出故障时,由用户直接向系统提交报修信息。用户在客户端进入报修界面,输入报修柜体、原因及用户手机号提交服务器。服务器匹配设备号及柜體,将异常原因传入异常信息库,并将该设备相应柜体关闭。同时记录报修人信息,进行信誉评定,防止恶意报修影响系统正常运行。
4.7 消息推送模块
系统采用Redis[7]实现消息队列。Redis作为非关系数据库IO连接数高,可以支持频繁连接,同时可以很好适应Java序列化传输,高效实现系统性能。Java采用Jedis进行Redis的存储和Redis的连接池设置,再利用Redis中list的push和pop进行数据出入队列的操作。将连接该模块的Message存入Redis,并以一定频率去扫描发送给所需目标用户。
5 共享存储柜平台关键逻辑实现(Key logicimplementation of shared storage cabinet platform)
5.1 存件过程具体实现
(1)用户在客户端输入所选柜体尺寸、手机号然后连同柜体设备号一起发送到后台服务器。
(2)后台服务器接到信息由柜体模块进行柜体分配。根据客户端所传设备号,匹配locker表单L_No数据,同时确定符合条件的柜体信息。
(3)确定柜体信息后,通过订单模块计算该尺寸柜体所需的订单费用,并生成订单信息的二维码图片,将数据流写入Response对象,发送客户端。
(4)用户用微信扫描客户端二维码,通过微信API获取用户对平公众号的openID,若该用户使用过此平台,则重新更新手机号,否则将用户信息存入customer数据表中。然后在业务订单数据表cur_order中生成当前次业务订单,同时在支付订单数据表pay_order生成支付订单信息,支付状态为待支付。
(5)后台服务调用微信支付接口,并提供回调访问地址,当微信支付完成时,回调服务地址。
(6)微信服务回调后台服务器更新支付订单,并更新业务订单插入开箱时间即O_Depositopentime字段,同时修改柜體状态,变为开柜使用状态。然后将该柜体信息存放到开锁消息队列。
(7)消息推送模块扫描队列,将开锁消息推送对应客户端,打开柜门,同时通过访问第三方短信接口,向用户提供的手机发送开箱相关信息。
(8)客户端关闭柜门,触发后台柜体关闭模块,将柜体状态变为关箱占用状态,并将关箱时间插入业务订单数据中,即O_Depositclosetim字段,完成存件业务逻辑。
5.2 取件过程实现
(1)用户取件扫描取件二维码,通过微信API获取当前用户openID,用来在customer数据中匹配存件用户。
(2)根据用户信息,通过业务订单获取柜体标识L_SubNo,并在locker数据表中匹配同名字段,获取用户将要打开的柜体信息。
(3)修改柜状态为开柜使用状态,并将当前时间插入业务订单数据中,即O_Pickopentime字段。
(4)将需要打开的柜体信息放入开锁消息队列。
(5)消息推送模块扫描队列,将开锁消息推送对应客户端,打开柜门,同时通过访问第三方短信接口,向用户提供的手机发送取件开箱相关信息。
(6)当柜门关闭,触发后台柜体关闭模块,根据业务订单时间信息判定为取件后的关闭操作,更改柜体状态为关箱可用状态,同时将关箱时间插入业务数据中,即O_Pickclosetime字段,完成取件业务逻辑。
6 结论(Conclusion)
本平台采用Spring Boot微服务架构,基于微信公众号搭建,实现了开发的敏捷化,模块化,对于系统的扩展性有极大的提高。同时基于微信公众号实现用户标识,不但有庞大的流量入口而且简化了系统用户逻辑处理,快捷高效地实现了存储柜共享管理。在系统设计方面,对整个系统业务流程、模块功能及数据实体设计进行了分析讨论。本平台经过测试运行,达到预期设计,已初步实现盈利。而且由于模块化设计不但满足了存储柜共享功能,还具有很高的扩展性,为以后平台的扩展提供了便利。
参考文献(References)
[1] 杜庆,高飞翔,蓝丹莉.共享经济下的校园智能储物柜应用研究[J].现代经济信息,2018(7):361.
[2] 王永和,张劲松,邓安明,周智勋.Spring Boot研究和应用[M].信息工程,2016,10:91-94.
[3] 李荣国,王见.MySQL数据库在自动测试系统中的应用[J].计算机应用,2011,31(S2):169-171;175.
[4] 杜华.Linux编程技术详解[M].北京:人民邮电出版社,2007.
[5] 李俊杰.Maven在企业Java软件产品中的应用[J].电脑知识与技术,2011,7(7):1562-1565.
[6] 谢远超.微信公众号信息服务平台的设计与实现[D].中山大学,2014.
[7] 邱祝文.基于redis的分布式缓存系统架构研究[J].网络安全技术与应用,2014(10):52-54.
作者简介:
赵升枝(1995-),男,硕士生.研究领域:软件开发.
仲梁维(1962-),男,硕士,教授.研究领域:计算机辅助智能设计制造.
相关文章!
  • 融合正向建模与反求计算的车用

    崔庆佳 周兵 吴晓建 李宁 曾凡沂<br />
    摘 要:针对减振器调试过程中工程师凭借经验调试耗时耗力等局限性,引入反求的思想,开展了

  • 浅谈高校多媒体教育技术的应用

    聂森摘要:在科学技术蓬勃发展的今天,我国教育领域改革之中也逐渐引用了先进技术,如多媒体技术、网络技术等,对于提高教育教学水平有很

  • 卫星天线过顶盲区时机分析

    晁宁+罗晓英+杨新龙<br />
    摘 要: 分析直角坐标框架结构平台和极坐标框架平台结构星载天线在各自盲区状态区域附近的发散问题。通过建