论文word版下载地址
目录
中文摘要 3
Abstract 4
1 绪论 6
1.1 研究背景与意义 6
1.1.1 研究背景 6
1.1.2 研究目的与意义 6
1.2 研究现状 7
1.2.1 管理信息系统研究现状 7
1.2.1.1 管理信息系统发展历程 7
1.2.1.2 管理信息系统应用综述 11
1.2.2 Web GIS应用现状 12
1.2.3 网络文本评论挖掘与分析研究现状 14
1.2.4 推荐算法研究现状 15
1.3 研究内容 16
1.4 本论文的结构安排 17
2 相关技术与算法 17
2.1 开发语言及基础框架 17
2.2 数据存储技术 18
2.2.1 为何选择MySQL 18
2.2.2 Elasticsearch技术简介 19
2.3 地理信息技术 20
2.4 评论文本情感极性分析技术 21
2.5 推荐算法 24
2.6 权限及安全验证技术 28
3 互联网+药店推荐系统需求分析 32
3.1 可行性分析 32
3.1.1 经济可行性分析 32
3.1.2 技术可行性分析 32
3.1.3 操作可行性分析 32
3.2 需求分析 33
3.2.1 业务需求分析 33
3.2.2 系统软件需求分析 33
3.2.3 系统运行环境需求分析 34
3.3 系统功能需求分析 34
3.4 用户使用需求分析 34
4 系统设计 35
4.1 总体设计 35
4.1.1 系统设计原则 35
4.1.2 系统设计总体目标 35
4.1.3 系统设计总体架构 36
4.2 概要设计 36
4.2.1 模块划分 36
4.2.2 业务流程分析 37
4.2.2.1 普通用户 37
4.2.2.2 药店管理员 38
4.2.2.3 系统管理员 39
4.3 数据库设计 40
4.3.1 数据库命名规则 40
4.3.2 数据库逻辑结构设计 41
4.3.2.1 权限模块逻辑结构设计 41
4.3.2.1 业务模块逻辑结构设计 42
4.3.3 主要数据表设计 42
4.4 详细设计 46
4.4.1 系统程序代码设计 46
4.4.2 系统结构设计及子系统划分 48
4.4.3 系统功能模块详细设计 49
4.4.3.1 用户登录子系统S001 49
4.4.3.2 后台管理子系统S010 50
4.4.3.3 药店管理子系统S011 54
4.4.3.4 地理信息子系统S100 56
4.4.3.5 评论管理子系统S101 58
4.4.3.6 药店推荐子系统S110 59
4.4.3.7 客户使用子系统S111 60
5 主要功能展示 62
5.1 用户登录展示 62
5.2 普通用户功能展示 63
5.3 系统管理员功能展示 66
5.4 药店管理员功能展示 70
6 结论与展望 71
6.1 结论 71
6.2 展望 72
参考文献 73
随着社会的进步与发展、社会基础设施建设和服务也越来越完善。药店深入到了城市的各个社区,为我们买药治小病带来了方便。同时,由于药店越来越多、药店等级、服务水平参吃不齐、药品种类繁多等,消费者容易患上选择困惑症。为使消费者挑选到合适的药店和满意药品,也为使药店管理者将本药店和药店药品更好的呈现给消费者,本文设计和实现了互联网+药店推荐系统。
本系统的实现主要用Java语言开发,采用了当前流行的开源框架和技术,并融合了Web GIS技术、情感分析算法和推荐算法;数据存储采用MySQL和Elasticsearch,Elasticsearch用于存储用户行为和用户评价等数据量较大的数据,便于查询、检索和分析,其他系统数据存储在MySQL数据库。该系统包括用户登录子系统、后台管理子系统、药店管理子系统、地理信息子系统、评论管理子系统、药店推荐子系统和客户使用子系统。
本系统分为前端和管理后台。前端包括浏览附近的药店、关键词查找推荐药店、查看推荐药店的药品信息和历史用户评论、导航至推荐药店、对推荐方案中的药店药品进行评价等功能,可用于移动端设备,主要服务于普通用户;管理后台主要在PC端使用,包括系统管理如资源、角色、用户等管理以及药店、药品管理等功能,服务于系统管理员和药店管理员。
本系统满足了消费者个性化买药需求,解决了消费者药店、药品选择的困难,为消费者在最短的时间推荐最合适的购药方案,节约了时间成本,同时也营造了一个更好的购药氛围和环境,药店和药店的药品也能更好的展现给消费者,为消费者和药店带来了双赢。
关键词: 药店,药品,推荐系统,Web GIS,情感分析,互联网+
With the progress and development of society, social infrastructure construction and services are also becoming more and more perfect. The pharmacy went deep into the various communities in the city and brought convenience for us to buy medicines to cure minor ailments. At the same time, due to the increasing number of pharmacies, pharmacy levels, poor access to quality and service, and wide variety of medicines, consumers are prone to choice confusion. In order to enable consumers to select suitable pharmacies and satisfactory medicines, and in order to enable pharmacy managers to better present this pharmacy and medicine to consumers, this paper designed and implemented an Internet plus pharmacy management system.
The implementation of this system is mainly developed in the Java language, using the currently popular open source frameworks and technologies, and integrating Web GIS technology, sentiment analysis algorithms and recommendation algorithms; The system uses MySQL and Elasticsearch to storage data, Elasticsearch for storing user behavior data and user evaluation data with a large amount of data is easy to query, retrieve, and analyze. Other system data is stored in the MySQL database. The system includes a user login subsystem, a background management subsystem, a pharmacy management subsystem, a geographic information subsystem, a comment management subsystem, a pharmacy recommendation subsystem, and a customer use subsystem.
The system is divided into front-end and management background. The front end includes functions such as browsing a nearby pharmacy, finding keywords to find a recommendation pharmacy, viewing medicine information and historical user reviews of a recommended pharmacy, navigating to a recommended pharmacy, and evaluating pharmacy medicines in a recommended plan, which can be used in a mobile device and mainly face to customers; The management background is mainly used on the PC side, including system management such as resources, roles, users and other functions as well as pharmacy, medicine management and other functions. It’s faces to system administrators and pharmacy administrators.
The system meets the needs of consumers for personalized medicine purchases, solves the difficulties of consumer pharmacies and medicine selection, recommends the most suitable medicine purchasing plan for consumers in the shortest time. it saves time cost, and also creates a better medicine purchasing environment, pharmacies and medicines can also be better demonstrated to consumers, this bringing a win-win situation for consumers and pharmacies.
Key Words: pharmacies, medicines, recommendation system, Web GIS, sentiment analysis, internet plus
随着社会经济的发展,城市化进程的加快,越来越多的药店慢慢进入人们的视线。在“大病进医院,小病上药店”的医药消费模式下,近些年来药店数量猛增。相对于日益增长的药店来说,传统小诊所的数量却在慢慢减少。调查发现,产生该现象的原因主要包括以下几个方面:
药店给人们看病带来了极大的方便的同时,也带来了很大的困扰,消费者在需要买药时,时常有如下困惑:
本论文的研究即是希望通过互联网+药店推荐系统解决消费者去药店买药的困惑。
随着互联网技术的飞速发展,我们逐渐从信息匮乏的时代很快步入了信息过载的时代。我们将药店定义为信息的生产者,将买药的患者定义为信息的消费者。
目前,无论是信息的生产者还是信息的消费者都遭遇到了非常大的挑战。作为信息消费者,如何从大量的药店中挑选出自己满意的药店,如何从海量的药品中挑选出对症的药品是一件很困难的事;作为信息的生产者,如何让药店和药店的药品信息脱颖而出,受到消费者的广泛关注,同样是一件十分困难的事。
本论文研究的主要目的就是为了解决药店与消费者的这一矛盾,通过联系消费者和药店信息,一方面帮助消费者发现对自己有价值的药店、药品信息,另一方面让药店和药店信息能够更有效的展现在对它感兴趣的消费者面前,从而实现药店和消费者的双赢。
为满足消费者个性化的购买药品需求,我们将GIS(Geographic Information Systems,地理信息系统)技术、评论挖掘与分析算法、推荐算法整合到药店管理系统中,形成互联网+药店推荐系统。用户使用该系统输入个性化查找需求,系统通过整合用户需求、药店药目信息、药店位置信息、药店评论信息、历史用户记录等,为用户推荐最为合适的1-3个药店,并罗列出推荐药品列表。客户选中推荐的药店后,可以通过本系统导航至该药店进行药品购买。互联网+药店推荐系统为消费者提供了便捷且更可靠的购药解决方案。
1.2.1.1 管理信息系统发展历程
随着管理理论和计算机技术的发展,管理信息系统的发展经历了6个时期,如图1-1所示。
图1-1 管理信息系统发展的6个时期
订货点法(Order Point Method,OPM)开始于20世纪30年代。其原理是:由于生产或者销售,某一类物料或者产品的库存将会慢慢减少。我们为该物料或产品的库存设置最低库存量,即库存阈值,当库存下降至库存阈值时,为补充库存,我们发出采购订货单或加工订货单,当所定的物料或者商品到达仓库时恰好能够补充前一时期的降低量,将其库存降低至安全库存,该订货的数量值,称为订货点。如图1-2所示。
图1-2 订货点法
在大批量的生产组织方式下,需求或消费量相对稳定的物料或产品适用订货点法。
物料需求计划(Material Requirements Planning,MRP),该理论由美国的Jo-seph A.Orlicky于1960s中期提出。他将原材料、辅料、中间产品、产品等这些企业生产过程中所涉及的材料在逻辑上看做同种物料,然后将企业生产过程中所需的各类物料划分为独立与相关两种需求类型。
图1-3 物料需求计划
MRP一般适用在订购业务方面,其没有深入到企业生产和管理的核心之中,而只是涉及到企业与市场的界面。
闭环MRP(Closed Material Requirements Planning)将能力需求计划和执行及控制计划的功能也加入进来,形成一个闭环,如图1-4所示,即为“计划-实施-评价-反馈-计划”的一个循环工作流程。
图1-4 闭环MRP
闭环MRP既适用订购业务,又深入企业生产管理的核心,实现了人力、机器、材料等各类生产资料的计划和控制,进而使得在生产管理方面对市场的应变能力显著增强。
制造资源计划(Manufacturing Resource Planning,MRPⅡ),将MRP作为核心,生产计划的制定依赖于企业经营目标,扩展信息共享的范围,将生产-销售-财务-采购-工程融合在一起,如图1-5所示,实现了数据集成与共享,形成全面的生产管理集成与优化模式。
图1-5 制造资源计划MRPⅡ
MRPⅡ适用于企业对制造资源的管理,企业内部各部门之间的信息交流单一的企业的管理。
企业资源计划(Enterprise Resource planning,ERP),它通常被称为一类商业管理软件,通常是一套集成应用程序,企业可通过它收集、存储、管理和解释来自商业活动的数据。ERP系统是一个实时(或接近)运行的集成系统,它支持所有应用程序的通用数据库,无缝连接各模块,用户的感觉即为统一的整体。ERP系统一般涵盖的功能区域包括:财务和会计、管理会计、人力资源、制造、订单处理、供应链管理、项目管理、客户关系管理。数据服务等。ERP最根本的优势在于将企业的各类业务流程进行整合,节省了时间和成本,管理层可以更快速的做出决策并减少错误;最大的难点在于统一ERP系统可能是一项艰巨的任务(特别是对于大公司),需要大量的时间、规划以及资金。
计算机集成制造系统(Computer Integrated Manufacturing System,CIMS),是一种使用计算机来集成控制整个生产过程的生产制造方法,它允许各个进程之间相互交换信息并协同工作。其主要优势在于能够创建自动化制造流程,可以加快制造速度且不易出错。与传统的“熄灯工厂”不同,它完全独立于人为干预,系统涉及灵活的制造,工厂可以快速修改以生产不同的产品,或者可以借助计算机快速更改产品数量。
图1-6 计算机集成制造系统CIMS
顺利运作的计算机集成制造系统的发展面临三大挑战:
1.2.1.2 管理信息系统应用综述
为了优化产业结构,减少管理成本,提高生产效率,企业越来越多重视自身的信息化建设。管理信息系统的建设和使用已深入社会的各行各业之中,如企业管理[1-5]、工程建设管理[6-8]、教育[9-12]、科研[13-14]、金融[15-17]、社保[18-19]、电力[20]、物流[21]、医疗[22]、旅游[23]、农业生产[24-26]等,并随着互联网技术的发展向智能化[27]、物联网化[28]方向发展。
在企业与工程管理方面,乐伟平[1]在现代企业人力资源管理要求的基础上,根据企业人力资源管理的需求,设计出符合WEB应用的企业人力资源管理信息系统。针对目前仓库信息管理系统在通用性、多样化、有效性等方面的不足与缺陷,彭红利[2]在仓库高效管理工作流程的各个环节基础上,提出通用物资仓库管理信息系统的设计与实现的方案。谢鹏[5]通过分析管理系统研究和实现过程中存在的问题,采用B/S架构,运用.Net等Web技术等开发和实现一个功能完善的建筑企业管理信息系统。张宇栋[8]在深入研究企业安全生产管理中事故隐患排查治理及预警的主要功能需求和业务逻辑的基础上,构建以隐患排查治理为核心的生产事故隐患排查治理及预警信息系统的基本架构,设计了生产事故隐患排查治理及预警管理信息系统。
在教育与科研方面,骆鹏傲等[9]将管理信息系统应用于研究生招生与培养管理,提高了研究生管理的工作效率。宋甜[10]为提升高校学生管理的工作效率,减少各级教育管理部门和高校都在学生信息的管理方面的人工资源、物资资源和财产资源,推动信息化的高校学生管理实现信息化管理平台,实现了学生信息管理系统设计与实现。管伟元[13]等以自主研发的科研设计管理信息系统为基础,采用数据库优化等技术,总结出了适用于一般信息管理系统的指导性方法。杨扬等[14]开发了包括立项管理、人力资源管理、科技成果管理、经费管理、考核管理及统计分析等模块的科研项目管理信息系统,提高了科研项目管理效率。
在金融与社保方面,杨彦璐[16]设计了民生银行信贷管理信息系统,该系统实现办公自动化平台的升级,其主要思想是将信贷管理业务流程信息化、规范化,有效的提高信贷审批的效率、提高信贷管理的质量,同时为信贷管理、信贷服务、信贷咨询人员提供统一的办公平台。苏樱[17]开发了资金管理信息系统平台,实现了“管理上信息化、界面上个性化、操作上自动化”。刘耘礽[18]对我国社保基金一体化管理信息系统进行了研究和设计,为社保基金管理信息化建设提供了思路和参考。刘毅新[19]开发了社会保险管理信息系统,实现了信息查询、结算与财务管理以及分析预测等功能。
在其他生活领域方面,李维雅[22]为提高医院管理信息系统日常维护和管理能力,促进医院工作的顺利开展,归纳总结了医院管理信息系统的日常管理与维护的重要性,并对其日常管理与维护的主要内容和相关策略进行分析。针对我国旅游业的信息管理水平依然处于滞后的状态,传统的信息管理方法无法满足现阶段旅游业发展的需要,张曼玲[23]等对旅游管理信息系统系统的可行性、设计和实现进行了进一步设计。吴健[26]以种猪养殖业现状、信息管理需求等为理论基础,分析了种猪养殖管理工艺。在种猪场生产管理阶段将先进、科学的信息、数字化技术运用其中,对种猪数字化管理信息系统进行建构。此外,管理信息系统已应用到智慧城市建设[27]和智能物联网平台建设[28]。
在药店和药品管理方面,管理信息系统的设计方案也十分成熟[29-32]。本系统在前人基础上设计和实现药店及药品基础信息的管理、药店和药品评价管理等,其基础数据即是用于给消费者推荐药店药品数据的直接或间接来源。
地理信息系统(Geographic Information Science,GIS)综合了地理学、制图学、测量学、测地学、计算科学和远程传感技术等诸多学科与技术而形成的一个复杂的计算管理机系统,该系统为采集、传输、存取和回显现实世界中的空间信息实现了一系列功能完善且强大的工具。Web GIS可理解为基于Web环境的GIS。
目前,国内优秀的GIS平台有很多,商业化的如SuperMap,MapGIS等。SuperMap是北京超图软件股份有限公司研发的大型GIS平台,它包括云GIS平台软件、桌面GIS平台、移动GIS开发平台、网络客户端GIS开发平台、组件GIS开发平台以及相关的空间数据生产、加工和管理工具。MapGIS是武汉中地信息工程有限公司研发的大型基础地理信息系统管理平台,该平台结合了图形、图像、地质、地理遥感、测绘、人工智能、计算机科学等知识的大型智能GIS平台。这些GIS平台功能强大,定位十分精确,应用范围广泛,并且可提供定制开发或支持二次开发。免费的Web GIS服务则更广泛的应用于Web应用中,如百度地图API、高德地图API、谷歌地图API等。
百度地图方面,程彬等[33]利用BaiduMapAPI实现生成房源周边地物动态的评价功能,采用PHP语言和MYSQL数据库开发了小型GIS平台。张欣欣[34]使用百度地图实现驾车导航功能,选定起点与终点,可查询出最少时间,最短距离,避开高速三种驾车方案。郑诗嘉等[35]剖析现有O2O餐饮系统存在的不足,将百度地图的定位功能应用于O2O餐饮系统中。孙迪等[36]则研究了百度地图API在WebGIS中的应用方法和过程,分析了百度地图API与WebGIS结合的优势,实现了交通流量的查询。姜珊等[37]认为传统GIS平台开发过程繁琐、运维成本较高,因此利用百度地图API技术开发水库信息显示系统。
高德地图方面,鲁萱萱[38]设计了一个专注于发现与分享运动的APP,该APP的实现运用了高德地图API与投放自定义POI点的算法,方便骑行范围内的骑友进行交流。马超等[39]设计一款基于高德地图的生活服务平台,该平台可实现对周边医院、超市、派出所等查询导航功能,以及数字地图的基本功能。李庭威等[40]通过服务端读取rtklib传来的位置信息,提取出经纬度传给客户端,将高精度差分位置信息显示在高德地图上,可实时更新测量点的位置。吴国华[41]开发了基于高德地图 API的公交查询系统项目,并以该项目为教学案例,教授学生。
谷歌地图方面,吴肖等[42]使用谷歌地图提供的可添加各种个性化功能的API进行二次开发,开发了校园电子地图。李垠等[43]通过使用谷歌地图API,快速、有效的将将已发生的地震相关信息和实时地震信息已地图、影像的形式展示出来,为公众提供了一个十分友好、方便的地震信息管理平台。霍胜春等[44]将谷歌地图API用于系统中来解决流动机械的远程监控,提高了港口机械的效率,实现港口的经济效益。
本系统Web GIS采用基于百度地图的API,因为百度地图在兴趣点(Point of Interest,POI)的展示功能上更为强大,且网页版地图上百度地图API的平台性更好。
网络文本评论挖掘,或称意见挖掘,即是面向网络文本,分析出有用的意见信息或知识。主要应用包括:①产品(电商商品)评论挖掘;②舆情分析等。
产品评论挖掘方面,通过分析用户评价,可进行商品推荐或作为产品(服务)改进的参考依据。许祥军等[45]认为挖掘网络评论能够为产品开发提供有用的信息,他们结合了几个经典的文本挖掘方法包括词频统计、点互信息算法、词频-逆文档频率作为特诊提取的方法,并通过情感分析和情感强度分析提出了面向产品开发的评论挖掘方案。程惠华等[46]通过挖掘产品评论,并进行情感倾向性分析,得出用户对产品的满意度。李涵昱等[47]认为挖掘商品评论,对分析商品口碑、进行商品推荐有十分重要的价值。黄秋义等[48]运用网络爬虫技术爬取商品评论信息,采用语义分析和数学统计方法进行情感倾向性分析,实现了面向电商平台的意见挖掘模型。刘紫玉等[49]研究了基于消费者评论挖掘的B2C网购物流服务因素类型和作用机制,设计了物流服务质量的作用方案,该方案对改善电商企业物流服务质量、提高竞争力能够发挥重大作用。郑玉桂[50]则针对电商评论,加入了句子级的细颗粒度的情感倾向性分析,不仅可以分析整篇评论的情感极性,也可以分析出评价实体的情感极性。郗亚辉[51]研究了产品评论中的特征同义词识别方法,选取了must-link和can-not-link两类约束,并采用了层次聚类算法。陈义[52]通过分析天猫商城和京东商城用户对手机的评论发现,天猫商城的用户更在意手机的性价比和购物体验,而京东商城的用于则更在意手机的整体性能。
舆情分析方面,我们将其分为社会舆情分析和企业舆情分析。
社会舆情分析,通过挖掘分析突发事件、热门话题等网络评论文本,了解网民所持的态度,有助于民心,也有利于舆情预警和导向,有利于国家安全和社会稳定。傅黎犁等[53]以“毒胶囊”事件为案例进行了舆情检测和分析,探讨了医学情报机构如何在突发事件中进行舆情分析。张瑜等[54]以微博热议话题“背景单双号限行常态化”为例,研究了社交媒体舆情分析方法,并将主体分类模型引入舆情分析之中,以时间为脉络进行面向主题的情感分析,为舆情分析提供了对象和时点选择的建议。宋铁等[55]通过监测几件突发公共卫生事件的网络舆情,认为舆情监测系统是现代疾病控制工作的一个重要手段,是疫情监测的有效的辅助手段。李斅葳[56]采用数据挖掘、关联分析、聚类分析等技术和算法,设计了基于敏感信息的意见挖掘方案。姜胜洪[57]研究了网络谣言的形成、传导与舆论导向机制,为降低网络谣言的危害,建议政府加强网络舆情分析判研,加快培养意见领袖等意见。
企业舆情分析,通过挖掘分析用户对企业或竞争对手评论,为企业提供危机负面监测,有利于市场数据调研、品牌营销分析、品牌形象维护等。陈元等[58]构建企业竞争情报挖掘模型,从用户评论中获取产品竞争情报,并应用于企业产品的分析。石进等[59]认为随着互联网的发展,舆情对企业影响越来越大,舆情监控系统是企业竞争情报必不可少的一部分。叶水茂[60]针对企业如何提升危机管理和舆情应对能力,如何在舆论导向中转“危”为“机”等问题提出了应对的方案。
本系统主要通过挖掘用户病因与药品选择关联关系和挖掘对药店、药品的评论,分析出病因、药店、药品选择的最佳组合方式,作为药店推荐的主要参考数据之一。
目前,学者对于推荐算法的研究主要分为以下四个方面:①基于内容的推荐算法;②协同过滤推荐算法;③基于知识的推荐算法;④混合推荐算法。
基于内容的推荐算法,例如个性化新闻推荐、给用户打上个性化标签、依据用户喜好等。刘世杰等[61]分析了网络新闻推荐的策略,研究了推荐系统模型,总结了基于个性化新闻推荐的方法。黄志强[62]提出了一种层次化标签推荐算法,使用余弦相似度计算标签的相似性,从而为物品添加精确度更高的标签。张东伟[63]研究了面向用户偏好的包推荐算法,为准确区分用户的相似度,提出了一种基于灰色关联的相似度计算方法,为降低推荐算法复杂度,提出了基于效用的包推荐算法,提高了推荐结果的质量。
协同过滤推荐算法,简单理解即是“物以类聚、人以群分”,具有相似属性的人或物具有相似的需求。协同过滤算法分为两种,一种为基于用户的协同过滤算法,一种为基于物品的协同过滤算法。
基于用户的协同过滤算法方面,贺桂和[64]设计了一种基于用户偏好挖掘的电子商务协同过滤推荐算法。该算法利用用户偏好挖掘技术进行用户显性偏好知识和隐性偏好知识的挖掘分析,实现基于用户偏好知识的最近邻居社区构建和智能推荐。韩亚楠等[65]通过用户属性偏好和项目流行度计算用户对项目的偏好度,并将基于时间的兴趣度权重函数和偏好度引入到项目相似度计算和推荐过程中,确定项目最近邻集合,从而实现最优推荐。杨大鑫等[66]认识到传统协同过滤算法在处理的数据时存在数据稀疏性和扩展性不佳等问题,提出利用Weighted Slope One算法缓解其数据稀疏性,利用基于最小方差的K-means算法提高其扩展性。
基于物品的协同过滤算法方面,卜旭松[67]面对海量的视频资源,对视频相似度和用户偏好进行计算,提出了改进的基于物品协同过滤推荐算法。吴玺煜等[68]使用知识图谱表示学习方法通过计算物品之间的语义相似性,将物品自身的语义信息融入协同过滤推荐。算法弥补了协同过滤算法没有考虑物品本身内涵知识的缺陷,在语义层面上增强了协同过滤推荐的效果。李琳娜等[69]认为物品之间的相似关系具传递性,提出基于启发式的物品相似度传播的协同过滤推荐方法。
基于知识的推荐算法,这种方法比较典型的是构建领域本体,或者是建立一定的规则,进行推荐。曾维明[70]通过引入语义网和本体的技术,构建基于本体的语义检索系统,并基于电影语义检索系统的需求,提出基于本体的个性化推荐算法。何明等[71]为了提高个性化推荐效率和推荐质量,平衡冷门与热门数据推荐权重,改进了基于关联规则的Apriori算法,设计了基于k前项频繁项集的剪枝方法,该方案提高了频繁项集的提取效率,拥有较高的推荐非空率、调和平均值和推荐准确率,有效地平衡了冷、热门数据的推荐权重。
混合推荐算法,顾名思义该方法会以加权或者串联、并联等方式融合以上方法。金紫嫣等[72]将标签推荐技术与协同过滤算法融合,提出一种新的混合式广告推荐算法,将广告关键词作为标签引入到Query页的相似性计算中,建立一种基于广告关键词的搜索广告兴趣模型。使用Top-N策略以减少最近邻候选集的大小,并基于预测CTR筛选出广告推荐结果。陈平华等[73]提出一种结合关联规则的协同过滤改进算法,首先挖掘项目之间的强关联规则,接着,将强关联规则过滤和拆分;最后将拆分后的强关联规则集成到相似度矩阵中,该算法提高了推荐系统准确性、有效性和适用性。
本系统采用混合推荐算法,该算法将症状关键词、用户评价、药店地理位置等因素,融入协同过滤推荐算法之中,形成互联网+药店推荐算法。
药店及药品信息管理:将药店抽象为对象,一个对象具有很多属性,本论文需要研究用户关心哪些属性,我们需要采集哪些属性。同理,药品信息的属性也非常多,需要对这些属性进行筛选。
权限管理:一个应用系统的权限的管理非常重要,用户角色不同,权限不同,对应的功能也就不同。
数据存储技术:目前主要的关系型数据库有MYSQL、SQL SEVER、ORACLE三种。本论文需要研究关系型数据库是否能满足本系统所有数据存储要求。其中,药品评论数据量级可能较大,选择何种存储方式能提高查询和分析效率。
地图上兴趣点的标注展示与导航:药店即为本系统地图上的兴趣点,我们需要研究如何将兴趣点更友好的展示给用户,如何从用户所在位置导航至其选择的药店位置。
评论文本情感极性分析:本系统的评论文本来至用户对药店、药品的评论。如何分析评论的情感极性以及如何展示给用户是本论文需要研究的内容。
推荐算法:当用户输入关键词后,如何将最合适的药店和药品推荐给用户是本论文需要研究的内容。
本论文各章节内容安排如下:
第1章:绪论。主要介绍本文的研究背景与意义;分析管理信息系统、Web GIS、网络文本评论挖掘与分析、推荐算法的研究现状,并分别引出本文的方法的思想;介绍本文的研究内容和论文的结构安排。
第2章:相关技术与算法。主要介绍系统的开发语言及基础框架、数据存储技术、地理信息技术、评论文本情感极性分析技术、推荐算法和权限及安全验证技术。
第3章:互联网+药店推荐系统需求分析。主要进行可行性分析、需求分析、系统组织架构分析、系统功能需求分析、用户使用需求分析、业务流程分析。
第4章:系统设计。包括总体设计、概要设计、数据库设计、详细设计。
第5章:主要功能展示。包括用户登录功能展示、普通用户功能展示、系统管理员功能展示和药店管理员功能展示。
第6章:结论与展望。总结了本文工作,并指出了系统存在的不足和后续的改进方向。
系统主要采用Java语言开发,情感极性分析模块使用了一个开源工具,是用Python语言开发的。主要基础技术及框架、版本及说明如表2-1所示。
表2-1 基础技术及框架、版本及说明
|
名称 |
版本 |
说明 |
服务端技术 |
JDK |
1.7 |
Java虚拟机版本 |
Tomcat |
8.5.6 |
Web服务器中间件 |
|
Python |
3.6.1 |
情感极性分析模块开发语言 |
|
Spring |
4.1.6.RELEASE |
轻量级的Java 开发框架 |
|
SpringMVC |
4.1.6.RELEASE |
Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块 |
|
Mybatis |
3.3.0 |
Java的持久层框架 |
|
Shiro |
1.2.4 |
权限及安全框架 |
|
druid |
1.0.14 |
数据库连连接池 |
|
ehcache |
2.6.11 |
纯Java的进程内缓存框架 |
|
前端技术 |
Jquery |
2.1.4 |
快速、简洁的JavaScript框架 |
Amaze UI |
2.7.2 |
前端UI框架,支持H5 |
|
Layer |
2.3 |
漂亮的弹出层框架 |
|
DTGrid |
1.2.1 |
表格插件 |
|
JQuery validation |
1.14.0 |
数据合法性验证插件 |
|
百度地图API |
3.0 |
JavaScript API |
|
数据存储技术 |
MySQL |
5.5 |
数据库 |
Elasticsearch |
5.0 |
基于Lucene的搜索服务器,千万级量数据量查询与分析可到毫秒级 |
本系统数据存储主要用MySQL数据库,用户评论信息数据量较大,采用分布式文档存储技术Elasticsearch。
MySQL是一个开源的关系型数据库管理系统,使用SQL进行数据库管理,与Oracle、SQLServer、DB2等大型关系型数据库,其功能相对较弱。其主要特点包括:
MySQL应用十分广泛,大多数互联网公司数据库都是用的MySQL或者有用MySQL,如淘宝、京东、腾讯、百度等,特别是采用PHP开发的应用几乎都是用MySQL。
Elasticsearch简称ES,它基于Lucene,是一种开源的实时分布式搜索和分析引擎,可提供数据存储服务、搜索服务和实时数据分析服务。其主要特点是:
主要应用场景有:
本系统属于ES的简单应用,搭建单节点的ES服务器,用于存储用户的行为和对药店、药品的评论,进行分析,并提供查询检索功能,展示给用户。
百度地图API是一套为开发者免费提供的基于百度地图的应用程序接口,包括JavaScript、IOS、Android、静态地图、Web服务等多种版本,提供基本地图、位置搜索、周边搜索、公交驾车导航、定位服务、地理编码及逆地理编码等丰富功能。
本系统采用百度地图JavaScript API,它是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。
百度地图快速开发步骤如下:
user-scalable=no" />
src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥">
var map = new BMap.Map("container");
//其中117.175215表示经度,39.109359表示纬度。(为南开大学坐标)
var point = new BMap.Point(117.175215,39.109359);
map.centerAndZoom(point, 15);
至此,我们就快速创建了一张以南开大学为中心的地图,如图2-1所示。
图2-1 以南开大学为中心地图(百度API开发)
本系统后续的地图开发,均基于此地图。
本系统采用一款开源、免费的情感分析工具[74],进行用户对药店、药品评论的情感极性分析。该工具采用Python语言开发,实现了使用一种基本算法来预测文章的情感。经过测试,基本满足对本系统情感极性分析的需求,且准确度可以信赖。其具体功能如下:
bsa_agorithm算法核心代码片段如下:
#!/usr/bin/python
#encoding=utf-8
from algorithm import Algorithm
class BsaAlgorithm(Algorithm):
//载入情感词典,我们使用大连理工大学情感分析词库
def __init__(self, negative_word_file):
negative_word_file = file(negative_word_file, "r")
lines = negative_word_file.readlines()
self.negative_word_set = set()
for line in lines:
line = line.encode("UTF-8").strip()
if line.isspace():
continue
self.negative_word_set.add(line)
negative_word_file.close()
//计算情感值
def cal_semantic_value(self, article_semantic_result):
segment_value_list = list()
for seg_result in article_semantic_result:
seg_value = list()
for setence_result in seg_result:
setence_value = 0
word_counter = 0
for word_result in setence_result:
if word_result.has_key("meaning") is False:
word_counter += 1
continue
value=int(word_result["semantic_strength"])
# TODO check the polarity use the self
# negative word set,
# and change the polarity
last_word_pos = word_counter - 1
is_reverted = False
if last_word_pos >= 0:
last_word_result =
setence_result[last_word_pos]
last_word = last_word_result["word"]
if last_word in self.negative_word_set:
is_reverted = True
if word_result["semantic_polagiry"] == "2":
value = value * (-1)
if is_reverted:
value = value * (-1)
setence_value += value
word_counter += 1
seg_value.append(setence_value)
segment_value_list.append(seg_value)
segment_value = list()
for item in segment_value_list:
sum = 0
counter = 0
for value in item:
sum += value
counter += 1
if counter == 0:
average = 0
else:
average = sum /counter
segment_value.append(average)
article_sum = 0
seg_counter = 0
for seg in segment_value:
article_sum += seg
seg_counter += 1
if seg_counter == 0:
article_average = 0
else:
article_average = float(article_sum)/seg_counter
# TODO add more result
return article_average
评论情感极性分析方法调用string_semantic_analysis方法:
# 调用string_semantic_analysis方法
@staticmethod
def string_semantic_analysis(input_string,library,algorithm):
//分词
segment_list=ArticleAnalysis.get_segment_list(input_string)
segment_partition_list=ArticleAnalysis.partition(segment_list)
//计算情感极性值
article_result = ArticleAnalysis.semantic_analysis(segment_partition_list, library, algorithm)
return article_result
分析返回的结果为json字符串,格式如下:
{
'score' : 1;
'score_comment' :
'正:正向情感;负:负向情感。情感值越大,情感越强。';
'details' : [
{'meaning' : '赞美', 'strength' : 5},
{'meaning' : '佩服', 'strength' : 3}
]
}
返回值字段说明:
本系统只处理score字段,处理整体的情感得分,获取整体情感极性及极性强度,暂不处理details字段,不处理子情感分类。
采用基于地理位置和评价的协同过滤推荐算法,实现药品和药店的推荐。主要步骤如下:
步骤1:计算基于协同过于的推荐值,采用词频-逆文件频率(Term Frequency-Inverse Document Frequency, TD-IDF)算法,药品、药店的关键词组和用户输入的关键词组为维度,建立向量空间模型,计算用户维度与各药店、药品维度的余弦相似度,该值即作为基于协同过于的推荐值,的取值范围为[-1,1];
步骤2:计算基于地理位置的推荐值,计算方法如公式(1)所示。其中x表示用户位置与药店位置之间的距离,a表示阈值距离,当xa时推荐值为负,本系统a值取5,即阈值距离为5公里。的取值范围为[-1,1]。
步骤3:计算基于用户评论的推荐值,计算方法如公式(2)所示。其中x为情感极性计算值,按照第2.4小结情感极性算法计算所得,b为极性强度分为几个等级,本系统取b=5。的取值范围为[-1,1]。
步骤4:计算最终推荐值y,计算方法如公式(3)所示。y的取值范围为[-3,3]。最终推荐值y越大,推荐越靠前;反之越靠后。
另附计算的核心代码如下:
//声明必要的模型变量
private static int len = 0; //总文档数
private static ArrayList< String[] > doc
= new ArrayList
private static HashMap
private static int leng[]; //文档词数
private static float film[]; //词向量的模
//获取所有文档,即获取用户查找关键词和所有药品、药店关键词记录
doc=getAllDoc();
//计算TDIDF值
public static void calTdidf(){
long a = System.currentTimeMillis();
HashMap
int size;
int n = 0;
String str;
HashMap
for(String d[]:doc){
size = d.length;
leng[n] = size; //文档词数
HashMap
for(int i = 0; i < size; ++i){
str = d[i];
if(!td.containsKey(str)){
td.put(str, (float) 1.0);
if(idf.containsKey(str))
idf.put(str, idf.get(str)+1);
else
idf.put(str, (int) 1);
}
else
td.put(str, td.get(str)+1);
}
tmp_tdidf[n++] = td;
}
String del = "";
float ft,sum_tdidf[] = new float[len];
for(int i = 0; i < len; ++i){
for(String st:tmp_tdidf[i].keySet()){
ft = (float) (Math.log(tmp_tdidf[i].get(st)/leng[i] + 1)*Math.log(len/idf.get(st)));
sum_tdidf[i] += ft;
tmp_tdidf[i].put(st, ft);
}
}
//过滤
float ftmp;
for(int i = 0; i < len; ++i){
HashMap
ValueComparator bvc = new ValueComparator(tmp_tdidf[i]);
TreeMap
sorted_map.putAll(tmp_tdidf[i]);
ft = 0;
for(String key:sorted_map.keySet()){
ftmp = tmp_tdidf[i].get(key);
ft += ftmp;
if(ft/sum_tdidf[i] > 0.8)//保留前80%的Tdidf值
break;
td.put(key, ftmp);
}
tdidf[i] = td;
}
long b = System.currentTimeMillis();
System.out.println("计算td-idf+去除噪音时间:"+(b-a)+" ms");
}
//预处理向量的模
public static void calFilm(){
long a = System.currentTimeMillis();
for(int i = 0; i < len; ++i){
film[i] = (float) 0.0;
for(String str:tdidf[i].keySet()){
film[i] += tdidf[i].get(str)*tdidf[i].get(str);
}
film[i] = (float) Math.sqrt(film[i]);
}
long b = System.currentTimeMillis();
System.out.println("处理向量模时间:"+(b-a)+" ms");
}
//计算余弦距离
public static float cosine(int i,int j){
int x = i, y = j;
float ans = 0;
if(tdidf[i].size() > tdidf[j].size()){
x = j;
y = i;
}
for(String str:tdidf[x].keySet()){
if(tdidf[y].containsKey(str))
ans += tdidf[x].get(str)*tdidf[y].get(str);
}
return ans/(film[x]*film[y]);
}
public static void calSimilarity() throws IOException{
long a = System.currentTimeMillis();
FileWriter fw = new FileWriter("DocSimilarityMatrix.csv");
for(int i = 0; i < len; ++i){
for(int j = 0; j < i; ++j ){
fw.write(cosine(i, j)+",");
}
fw.write("1.0,");
fw.write("\n");
}
fw.close();
long b = System.currentTimeMillis();
System.out.println("计算相似度并写入时间:"+(b-a)+" ms");
}
//values比较
class ValueComparator implements Comparator
Map
public ValueComparator(Map
this.base = base;
}
//按values降序
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return -1;
} else {
return 1;
}
}
}
Shiro是Apache旗下的一款优秀开源、免费的安全(权限)框架,可实现认证、授权、加密、会话管理、与Web集成、缓存等功能。
用户登录认证过程SpringMVC控制层核心代码:
/**
* 用户登录
* 认证过程:
* 1、想要得到Subject对象,访问地址必须在shiro的拦截地址内,不然会报空指针
* 2、用户输入的账号和密码,存到UsernamePasswordToken对象中,然后由shiro内部认证对比
* 3、认证执行者交由ShiroDbRealm中doGetAuthenticationInfo处理
* 4、当以上认证成功后会向下执行,认证失败会抛出异常
*
* @param accountName 账户名称
* @param password 密码
* @return
*/
@RequestMapping(value = "login.html", method = RequestMethod.POST, produces = "text/html; charset=utf-8")
public String userLogin(UserEntity userEntity, String captcha, Boolean rememberMe, HttpServletRequest request) {
UsernamePasswordToken token = null;
try {
String expected = ShiroAuthenticationManager.getKaptcha(Constants.KAPTCHA_SESSION_KEY);
//获取用户页面输入的验证码
if(!StringUtils.equalsIgnoreCase(expected, captcha))
{
request.setAttribute("error", "验证码错误!");
return "/login";
}else
{
// 想要得到Subject对象,访问地址必须在shiro的拦截地址内,不然会报空指针
Subject subject = SecurityUtils.getSubject();
token = new UsernamePasswordToken(userEntity.getAccountName(), userEntity.getPassword());
//记住用户登录状态
token.setRememberMe(rememberMe);
subject.login(token);
if (subject.isAuthenticated()) {
/*//start
HttpSession loginedSession=userService.checkUserWhereLogined(userEntity);
if(loginedSession!=null){
//message=username+"账号已在其它地方登录,现将其下线并在此登录,请注意保护账户安全!";
//log.info(username+"账号已在其它地方登录,现将其下线并在此登录,请注意保护账户安全!");
loginedSession.invalidate();//使失效
}
//end
*/ userEntity = (UserEntity)subject.getPrincipal();
LoginInfoEntity loginInfo = new LoginInfoEntity();
loginInfo.setUserId(userEntity.getId().intValue());
loginInfo.setAccountName(userEntity.getAccountName());
loginInfo.setLoginIp(SecurityUtils.getSubject().getSession().getHost());
loginInfoService.log(loginInfo);
request.removeAttribute("error");
} else {
token.clear();
request.setAttribute("error", "用户名或密码不正确!");
return "/login";
}
}
}catch (UnknownAccountException uae)
{
if(null != token)
{
token.clear();
}
request.setAttribute("error", "账户不存在!");
return "/login";
}
catch (IncorrectCredentialsException ice)
{
if(null != token)
{
token.clear();
}
request.setAttribute("error", "密码错误!");
return "/login";
}catch (LockedAccountException e) {
if(null != token)
{
token.clear();
}
request.setAttribute("error", "您的账户已被锁定,请与管理员联系或10分钟后重试!");
return "/login";
} catch (ExcessiveAttemptsException e) {
if(null != token)
{
token.clear();
}
request.setAttribute("error", "您连续输错5次,帐号将被锁定10分钟!");
return "/login";
}catch(ExpiredCredentialsException eca)
{
if(null != token)
{
token.clear();
}
request.setAttribute("error", "账户凭证过期!");
return "/login";
}catch (AuthenticationException e) {
if(null != token)
{
token.clear();
}
request.setAttribute("error", "账户验证失败!");
return "/login";
}catch (Exception e)
{
e.printStackTrace();
if(null != token)
{
token.clear();
}
request.setAttribute("error", "登录异常,请联系管理员!");
return "/login";
}
return "redirect:/index.html";
}
权限控制精确到按钮级(功能级),前端采用jsp 标签形式进行权限控制。在使用Shiro标签库前,首先需要在JSP引入shiro标签:
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>
role.jsp页面权限控制实例:
添加
编辑
删除
分配权限
本系统成本主要来自于技术学习成本、系统开发成本以及运行和维护成本。作为毕业设计,主要成本开销在于运行和维护的开销。本系统搭建在阿里云,一方面,阿里云对于学生购买服务有较大的优惠;另一方面,阿里云团队接管了绝大多数运维工作。因此,总体成本开销可以控制在可承受范围之内。
效益方面,本系统作为药店推荐系统,用户通过使用本系统可在很大程度上提高其药店选择和药品购买的效率,且可以买到更加合适的药品,节省了用户的时间成本。
因此,本系统在经济上是可行的。
根据系统功能和设计,本系统采用基于Java语言开发,前后端采用当前流行的开源框架,数据库以MySQL为主,情感极性分析采用了一个开源的基础算法,推荐算法思想和实现步骤均已设计完备,可基于Java开发实现。
综上,本系统的框架均采用成熟的开源框架,核心技术和算法的技术储备也已完备,可基于这些技术开发出完整的”互联网+药店推荐系统“,因此,本系统在技术层面上是完全可行的。
系统采用B/S架构,服务端部署在阿里云,阿里云强大的技术团队可为本系统提供有力的技术支撑。客户端前端采用H5技术,能够便捷的在手机等移动设备上使用,且系统界面友好、操作简单、布局合理,用户很容易掌握操作要领。因此,从操作层面分析本系统是可行的。
将本系统主要的业务场景划分为用户模块、管理员模块和定时分析模块,业务需求如图3-1所示。
图3-1 业务需求分析
普通用户主要业务操作包括可以通过客户端查询药店、药品信息,系统通过用户查询,在地图上展示药店,并推荐最合适的药店,可进行路程规划和导航至推荐药店,用户可对药品、药店进行评价。
药店管理员主要业务操作包括维护本药店信息和本药店的药品信息。
系统管理员主要业务操作包括可对整个系统进行管理,包括基础信息、角色权限等,管理员可通过系统管理药店和药品信息,可管理用户和用户的评价等。
定时分析即是对用户评论进行采集和极性分析。
互联网+药店推荐系统的需求分析在具体操作过程中涉及到功能性需求与非功能性需求两大主要的内容,如表 3-1 所示。
表 3-1 功能性需求和非功能性需求表
功能性需求 |
非功能性需求 |
(1)用户可通过系统查询药店、药品信息; (2)系统可通过用户输入症状,推荐药品、药店;(3)用户可以通过系统导航至推荐药店;(4) 用户可对药店、药品进行评价;(5)管理员可以管理药店药品信息;(6)管理员可对系统进行基础管理,如系统权限管理等;(7)管理员可对用户评价进行管理;(8)系统可对用户评价进行分析和展示。 |
(1)优化系统和数据结构,将系统的响应时间控制在毫秒级;(2)确保系统的可靠性,保证系统7*24小时可提供服务;(3)界面友好,适用于手机等移动设备,易操作。 |
系统主要运行在PC端和移动端。管理员后台管理主要在PC端,用户使用主要在移动端。系统采用的是B/S架构,客户端只需要安装浏览器并连通网络即可以使用本系统,其中用户端要还需适应Android、IOS等操作系统,前端需适配不同屏幕规格的手机、平板等移动设备。
随着互联网时代的到来,互联网技术已深入到社会生活的各个领域。本系统将互联网技术、地理信息技术、情感极性分析技术、智能推荐技术与药店管理相结合,形成互联网+药店推荐系统。本系统旨在为购药者快速提供最适合的购药方案,减少消费者挑选的时间开销和成本开销。本系统一方面帮助消费者发现对自己有价值的药店、药品信息,并能提供最优路线方案到达推荐的药店购药;另一方面让药店和药店信息能够更有效的展现在对它感兴趣的消费者面前,从而实现药店和消费者的双赢。
将系统的用户分为3类角色:普通用户、药店管理者、系统管理者。
普通用户作为系统的直接受益者,主要可通过系统可查询附近药店的分布情况、药店等级、药店药品情况、开关门时间、是否支持医保等;可通过输入症状关键词推荐最合适的药品和药店;可根据选中的药店规划路径并导航至该药店;可查看历史用户对目标药店、药品的评价;可根据评价分析药店、药品的整体好评率等。
药店管理者可申请入驻本系统,入驻后可进行药店管理,包括药店信息维护,药店药品信息的维护等。
系统管理者可对系统进行基础管理,如基础信息维护、权限分配等;可审核药店入驻申请;可直接添加新的药店和所添加药店的药品;可管理用户及用户的评论;可查看各类统计分析报表等。
本系统结合了互联网行业先进理念,将数据分析、人工智能、GIS等先进技术引入管理信息系统,形成了一套完整的互联网+药店推荐系统解决方案。在系统设计中,需要具有前瞻性,充分考虑系统的可扩展性,注重用户体验,不断优化改进,使用该系统能够真正给用户带来方便和实惠。
互联网+药店推荐系统属于互联网产品,因此在设计时遵循一般互联网产品设计的原则:
本系统的最终目标是为需要买药的消费者提供最合适的购药方案,节省消费者因选择性困难造成的时间浪费,为消费者带来方便和实惠。
系统设计的总体架构如图4-1所示。
图4-1 系统设计总体架构图
为使系统架构更加清晰,将互联网+药店推荐系统划分为用户登录模块、后台管理模块、药店管理模块、地理信息模块、评论管理模块、药店推荐模块、客户使用模块。系统组织架构图如图4-2所示。
图4-2 互联网+药店管理系统组织架构图
使用UML活动图描述3类角色:普通用户、药店管理者、系统管理者的业务工作流程。
4.2.2.1 普通用户
普通用户业务服务主要涉及的模块包括用户登录模块、地理信息模块、评论管理模块、药店推荐模块、客户使用模块,其系统活动图如图4-3所示。
图4-3 普通用户活动图
普通用户通过系统可了解附近药店分布情况,当需要买药时,可通过输入关键字进行搜索,系统将推荐最适合的1-3个药店给用户,用户选择目标药店后,若不熟悉路向,可使用本系统提供的导航,系统将根据用户的出行方式,推荐最佳路径。用户在药店买药后,可就药效、服务等情况进行评价,这些评价可供其他用户参考。
4.2.2.2 药店管理员
药店管理员业务服务主要涉及用户登录模块、药店管理模块,其系统活动图如图4-4所示。
图4-4 药店管理员活动图
药店经营者可以以药店管理员的身份,通过向系统提供相关资质证明,申请入驻本系统。入驻成功后,可以装饰自己的药店,发布和管理药品等。入驻成功后,药店即可在系统上展示出来;发布药品成功后,若用户搜索匹配该药品,该药店和药品即可能被推荐给用户。
4.2.2.3 系统管理员
系统管理员业务服务主要涉及的模块包括用户登录模块、后台管理模块、药店管理模块、地理信息模块、评论管理模块,其系统活动图如图4-5所示。
图4-5 系统管理员活动图
系统管理员是系统正常运行的保障,负责系统基础信息的维护,根据不同的用户分配不同的角色和权限,审核申请入驻的药店,也可直接增加药店和药店的药品,管理用户对药店和药品的评论,通过统计分析模块,监控系统的整体运行状况。
本系统数据库命名按照一定的标准规范,命名规则如:
数据库逻辑结构设计划分为两块,权限设计模块与业务设计模块。
4.3.2.1 权限模块逻辑结构设计
权限主要包括用户、用户信息、角色、资源。其中,用户与用户信息为一对一的关系,用户与角色是多对多的关系,资源与角色是多对多的关系。权限模块的逻辑结构设计模型如图4-6所示。
图4-6 权限模块逻辑结构设计模型
4.3.2.1 业务模块逻辑结构设计
业务模块主要包括药店、药店关键词、药店图片、药品、药品关键词、药品图片、用户、用户评价、用户行为。其中,药店与药店关联词、药店图片、用户评价均为一对多的关系,药店与药品为多对多的关系,药品与药品关键词、药品图片、用户评价均为一对多的关系,用户与用户行为、用户评价均为一对多的关系。业务模块逻辑结构设计模型如图4-7所示。
图4-7 业务模块逻辑结构设计模型
表4-1 用户表(sys_user)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
u_id |
int |
32 |
NO |
|
用户id |
u_name |
varchar |
32 |
NO |
|
真实姓名 |
u_account_name |
varchar |
32 |
NO |
|
账户名称 |
u_password |
varchar |
64 |
NO |
|
用户密码 |
u_is_delete |
boolean |
|
NO |
0 |
逻辑删除状态 |
u_is_locked |
boolean |
|
NO |
0 |
是否锁定 |
u_describe |
varchar |
64 |
YES |
|
用户描述 |
u_credentials_salt |
varchar |
128 |
NO |
|
加密盐 |
u_creator_id |
int |
|
NO |
|
创建者 |
u_create_time |
datetime |
|
NO |
now() |
创建时间 |
u_update_time |
datetime |
|
NO |
|
更新时间 |
表4-2 用户信息表(sys_user_info)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
u_id |
int |
32 |
NO |
|
用户id |
u_sex |
char |
1 |
NO |
‘0’ |
性别 |
u_birthday |
date |
|
NO |
|
出生日期 |
u_telephone |
varchar |
16 |
NO |
|
电话 |
u_email |
varchar |
32 |
NO |
|
邮箱 |
u_address |
varchar |
64 |
NO |
|
住址 |
u_create_time |
datetime |
|
NO |
now() |
创建时间 |
表4-3 角色表(sys_role)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
r_id |
int |
32 |
NO |
|
角色id |
r_name |
varchar |
32 |
NO |
|
角色名称 |
r_key |
varchar |
32 |
NO |
|
角色key |
r_is_delete |
boolean |
|
NO |
0 |
角色状态,0:正常;1:删除 |
r_describe |
varchar |
64 |
YES |
|
角色描述 |
r_create_time |
datetime |
|
NO |
now() |
创建时间 |
r_update_time |
datetime |
|
NO |
|
更新时间 |
表4-4 用户-角色关系表(sys_user_role)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
ur_id |
int |
32 |
NO |
|
关系id |
r_id |
int |
32 |
NO |
|
角色id |
u_id |
int |
32 |
NO |
|
用户id |
ur_create_time |
datetime |
|
NO |
now() |
创建时间 |
表4-5 资源表(sys_resource)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
s_id |
int |
32 |
NO |
|
资源id |
s_parent_id |
int |
32 |
YES |
|
资源父id |
s_name |
varchar |
16 |
NO |
|
资源名称 |
s_source_key |
varchar |
64 |
NO |
|
资源唯一标识 |
s_type |
int |
|
NO |
|
资源类型,0:目录;1:菜单;2:按钮 |
s_source_url |
varchar |
64 |
YES |
|
资源url |
s_level |
int |
|
YES |
|
层级 |
s_icon |
varchar |
64 |
YES |
|
图标 |
s_is_hide |
boolean |
|
NO |
0 |
是否隐藏 |
s_describe |
varchar |
64 |
YES |
|
描述 |
s_create_time |
datetime |
|
NO |
now() |
创建时间 |
s_update_time |
datetime |
|
NO |
|
更新时间 |
s_order |
int |
|
NO |
0 |
菜单排序 |
表4-6 资源-角色关系表(sys_resources_role)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
sr_id |
int |
32 |
NO |
|
关系id |
s_id |
int |
32 |
NO |
|
资源id |
r_id |
int |
32 |
NO |
|
角色id |
sr_create_time |
datetime |
|
NO |
now() |
创建时间 |
表4-7 药店表(biz_pharmacy)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
p_id |
int |
|
NO |
|
药店id |
p_name |
varchar |
32 |
NO |
|
名称 |
p_business_license |
varchar |
64 |
NO |
|
营业执照号 |
p_business_license_url |
varchar |
128 |
NO |
|
营业执照扫描件url |
p_property |
char |
1 |
NO |
|
药店性质 |
p_open_time |
time |
|
NO |
|
开门时间 |
p_close_time |
time |
|
NO |
|
关门时间 |
p_level |
smallint |
|
NO |
|
等级 |
p_addr |
varchar |
64 |
NO |
|
地址 |
p_phone |
varchar |
16 |
NO |
|
联系电话 |
p_is_medical_insurance |
boolean |
|
NO |
0 |
是否医保报销 |
p_longitude |
decimal |
|
NO |
|
经度 |
p_latitude |
decimal |
|
NO |
|
纬度 |
p_is_verify |
boolean |
|
NO |
|
是否通过审核 |
p_enter_date |
date |
|
NO |
|
入驻时间 |
p_describe |
varchar |
128 |
YES |
|
描述 |
表4-8 药店图片表(biz_pharmacy_pic)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
pp_id |
int |
|
NO |
|
图片id |
pp_url |
varchar |
64 |
NO |
|
图片url |
p_id |
int |
|
NO |
|
所属药店id |
表4-9 药店关键词表(biz_pharmacy_keyword)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
pk_id |
int |
|
NO |
|
关键词id |
pk_name |
varchar |
16 |
NO |
|
关键词 |
p_id |
int |
|
NO |
|
所属药店id |
表4-10 药品表(biz_medicine)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
m_id |
int |
|
NO |
|
药品id |
m_name |
varchar |
32 |
NO |
|
名称 |
m_brand_id |
int |
|
NO |
|
所属品牌 |
m_function |
varchar |
64 |
NO |
|
主要功能 |
m_consumption |
varchar |
64 |
NO |
|
用量 |
m_is_prescription |
boolean |
|
NO |
0 |
是否处方药 |
m_is_chinese_patent |
boolean |
|
NO |
0 |
是否中成药 |
m_describe |
varchar |
128 |
YES |
|
描述 |
表4-11 药品图片表(biz_medicine_pic)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
mp_id |
int |
|
NO |
|
图片id |
mp_url |
varchar |
64 |
NO |
|
图片url |
m_id |
int |
|
NO |
|
所属药品id |
表4-12 药品关键词表(biz_medicine_keyword)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
mk_id |
int |
|
NO |
|
关键词id |
mk_name |
varchar |
16 |
NO |
|
关键词 |
m_id |
int |
|
NO |
|
所属药品id |
表4-13 药店-药品关系表(biz_pharmacy_medicine)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
pm_id |
int |
|
NO |
|
关系id |
m_id |
int |
|
NO |
|
药品id |
p_id |
int |
|
NO |
|
所属药店id |
pm_price |
decimal |
|
NO |
|
价格 |
pm_is_shelfed |
boolean |
|
NO |
|
是否上架 |
pm_shelf_no |
varchar |
16 |
NO |
|
所在货架号 |
表4-14 用户评价表(biz_user_evaluate)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
e_id |
int |
|
NO |
|
评价id |
u_id |
int |
|
NO |
|
评价者id |
u_name |
varchar |
32 |
NO |
|
评价者 |
e_evaluate_time |
datetime |
|
NO |
now() |
评价时间 |
p_id |
int |
|
NO |
|
评价的药店id |
p_name |
varchar |
32 |
NO |
|
评价的药店 |
m_id |
int |
|
NO |
|
评价的药品id |
m_name |
varchar |
32 |
NO |
|
评价的药品 |
e_type |
char |
1 |
NO |
|
评价类型 |
e_detail |
varchar |
256 |
NO |
|
评价详情 |
表4-15 用户行为表(biz_user_behavior)
列名 |
字段类型 |
长度 |
是否可为空 |
默认值 |
备注 |
b_id |
int |
|
NO |
|
行为id |
u_id |
int |
|
NO |
|
用户id |
b_occurrence_time |
datetime |
|
NO |
now() |
发生时间 |
b_topic |
varchar |
32 |
NO |
|
行为主题 |
b_describe |
varchar |
128 |
YES |
|
行为描述 |
本系统的开发采用经典的分层架构:表示层(web层),业务逻辑层(service层),数据访问层(dao层),业务实体层(entity层),其处理逻辑如图4-8所示。
图4-8 分层架构业务处理逻辑
表示层负责与用户进行交互,接受用户请求、数据,进行简单的数据处理,如:数据有效性判断、异常显示灯,反馈用户请求。它只与业务逻辑层、业务实体层(VO)发生关系。
业务逻辑层是整个系统的核心,承担了所有逻辑处理,实现了系统的功能。它只与数据访问层和业务实体层(BO)关联。
数据访问层只提供数据访问接口,不实现任何逻辑。它是数据库的管理者,但不是直接访问者,不直接与数据库发生关联。它只关联业务实体层(PO)。
业务实体类实现对数据的封装,数据库中每一张表都有对应的实体类,表字段对应类的属性。表示层、业务逻辑层、数据访问层的交互主要就是通过业务实体层中的各种实体类作为参数,实现访问请求,并返回数据的。
各层之间的关系如图4-9所示。
图4-9 分层架构之各层之间的关系
系统项目的包结构如下:
com.nankai.pharecom
|-.dao-------------------dao层接口
|---|-.impl--------------mappings文件(dao层实现)
|-.entity----------------javabean
|-.service---------------service层接口
|----|-.impl--------------service层实现
|-.web-------------------web层
|-.util------------------工具类
|-.common------------------通用工具包
根据系统的业务与功能,将其逻辑结构划分为用户登录子系统、后台管理子系统、药店管理子系统、地理信息子系统、评论管理子系统、药店推荐子系统、客户使用子系统如图4-10所示。
图4-10 系统子系统划分
各个子系统按照功能角度分解,划分出若干不同的功能模块,如4-11各图所示。
图4-11 各子系统功能划分
4.4.3.1 用户登录子系统S001
表4-16 用户登录模块详细设计
模块编号 |
S001-001 |
模块名称 |
用户登录 |
模块描述 |
管理用户登录、退出系统,包括普通用户、药店管理员和系统管理员 |
主要功能 |
登录系统:获取登录验证码、登录验证、登录 退出系统:退出系统,返回登录页面 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.IndexController
//处理方法 kaptcha(HttpServletRequest req, HttpServletResponse rsp);//获取验证码 userLogin(User user,String captcha,Boolean remember, HttpServletRequest request)//登录验证 index(Model model)//登录成功并跳转至主页 logout();//退出系统 |
表4-17 用户注册模块详细设计
模块编号 |
S001-002 |
模块名称 |
用户注册 |
模块描述 |
用户注册模块,主要用于普通用户和药店管理员注册 |
主要功能 |
包括用户唯一性验证、短信验证、检验注册信息的合法性与注册 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.indexController
//处理方法 checkUserUniqueByPhone(String phone);//通过手机号码检验用户唯一性 checkPhoneCode(String code);//检验手机验证码是否正确 checkUserLegal(User user,Model model);//用户信息合法性检验,若存在不合法信息,从model返回给页面 add(User user);//注册成功,保存用户 |
4.4.3.2 后台管理子系统S010
表4-18 资源管理模块详细设计
模块编号 |
S010-001 |
模块名称 |
资源管理 |
模块描述 |
管理系统资源(单与按钮等),包括添加资源、修改资源、删除资源、查询资源。 |
主要功能 |
添加资源:检验数据的合法性、保存资源 修改资源:修改并保存 删除资源:逻辑删除 查询资源:单一查询、分页查询、全量查询 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.ResourceController service层接口全类名:com.nankai.pharecom.service.IResourceService service层接口实现全类名:com.nankai.pharecom.service.ResourceService dao层接口全类名:com.nankai.pharecom.dao.IResourceDao dao层接口实现mapper:com.nankai.pharecom.dao.ResourceMapper
//处理方法 checkResourceLegal(Resource resource,Model model);//资源信息合法性检验,若存在不合法信息,从model返回给页面 add(Resource resource);//添加保存 update(Resource resource);//更新并保存 del(int resourceId);删除,逻辑删除,根据resourceId删除 findById(int resourceId);//通过resourceId查询 findByType(int type);//通过资源类型查询 findByName(String name);//通过资源名称查询 findByPage(Resource resource,Model model,Page findAll();//查询所有资源 |
表4-19 角色权限管理模块详细设计
模块编号 |
S010-010 |
模块名称 |
角色权限管理 |
模块描述 |
管理系统角色与角色权限,包括添加角色并为角色赋权、修改角色和角色权限、删除角色和查询角色 |
主要功能 |
添加角色:检验角色信息的合法性、角色权限设置、新增保存用户 修改角色:角色权限修改、角色信息修改并保存 删除角色:逻辑删除 查询角色:单一查询、分页查询、全量查询 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.RoleController service层接口全类名:com.nankai.pharecom.service.IRoleService service层接口实现全类名:com.nankai.pharecom.service.RoleService dao层接口全类名:com.nankai.pharecom.dao.IRoleDao dao层接口实现mapper:com.nankai.pharecom.dao.RoleMapper
//处理方法 permission(int rId, String resourceIds);//为角色设置/修改权限 checkRoleLegal(Role role,Model model);//角色信息合法性检验,若存在不合法信息,从model返回给页面 add(Role role);//添加保存角色 update(Role role);//更新并保存 del(int rId);删除角色,逻辑删除,根据rId删除 findById(int rId);//通过rId查询 findByName(String name);//通过角色名称查询 findByPage(Role role,Model model,Page findAll();//查询所有角色 |
表4-20 用户管理模块详细设计
模块编号 |
S010-011 |
模块名称 |
用户管理 |
模块描述 |
管理系统用户,包括添加用户并赋予角色、修改用户资料和角色、删除用户、查询用户。 |
主要功能 |
添加用户:检验用户的唯一性、检验数据的合法性、保存用户 修改用户:修改并保存 删除用户:逻辑删除 查询用户:单一查询、分页查询、全量查询 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.UserController service层接口全类名:com.nankai.pharecom.service.IUserService service层接口实现全类名:com.nankai.pharecom.service.UserService dao层接口全类名:com.nankai.pharecom.dao.IUserDao dao层接口实现mapper:com.nankai.pharecom.dao.UserMapper
//处理方法 checkUserUniqueByPhone(String phone);//通过手机号码检验用户唯一性 checkUserLegal(User user,Model model);//用户信息合法性检验,若存在不合法信息,从model返回给页面 add(User user);//添加保存用户 update(User user);//更新并保存 del(int uId);删除用户,逻辑删除,根据uId删除 findById(int uId);//通过uId查询 findByPhone(String phone);//通过电话号码查询 findByName(String name);//通过姓名查询 findByPage(User user,Model model,Page findAll();//查询所有用户 |
表4-21 药店审核模块详细设计
模块编号 |
S010-100 |
模块名称 |
药店审核 |
模块描述 |
系统管理员用于审核药店管理员申请药店入驻请求 |
主要功能 |
查看审核记录 审核处理、短信通知 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.PharmacyController service层接口全类名:com.nankai.pharecom.service.IPharmacyService service层接口实现全类名:com.nankai.pharecom.service.PharmacyService dao层接口全类名:com.nankai.pharecom.dao.IPharmacyDao dao层接口实现mapper:com.nankai.pharecom.dao.PharmacyMapper
//处理方法 findAuditList(Pharmacy pharmacy);//查看审核记录 AuditPharmacy (Pharmacy pharmacy);//审核药店 sendMsg(String phone, String result);//短信通知审核结果 |
4.4.3.3 药店管理子系统S011
表4-22 药店管理模块详细设计
模块编号 |
S011-001 |
模块名称 |
药店管理 |
模块描述 |
管理药店,包括添加药店、上传药店图片、修改药店资料、删除药店、查询药店。 |
主要功能 |
添加药店:检验药店的唯一性、检验数据的合法性、保存药店 上传图片:上传药店展示图片、营业执照扫描件 修改药店:修改并保存 删除药店:逻辑删除 查询药店:单一查询、分页查询、全量查询 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.PharmacyController service层接口全类名:com.nankai.pharecom.service.IPharmacyService service层接口实现全类名:com.nankai.pharecom.service.PharmacyService dao层接口全类名:com.nankai.pharecom.dao.IPharmacyDao dao层接口实现mapper:com.nankai.pharecom.dao.PharmacyMapper
//处理方法 checkPharmacyUniqueByBLNo(String blno);//通过营业执照号检验药店唯一性 checkPharmacyLegal(Pharmacy pharmacy,Model model);//药店信息合法性检验,若存在不合法信息,从model返回给页面 add(Pharmacy pharmacy);//添加保存 uploadPic(MultipartFile file,HttpServletRequest request);//上传图片 update(Pharmacy pharmacy);//更新并保存 del(int pId);删除药店,逻辑删除,根据pId删除 findById(int pId);//通过pId查询 findByBlNo(String blno);//通过营业执照号查询 findByName(String name);//通过药店名称查询 findByPage(Pharmacy pharmacy,Model model,Page findAll();//查询所有药店 |
表4-23 药品管理模块详细设计
模块编号 |
S011-010 |
模块名称 |
药品管理 |
模块描述 |
管理药品,包括添加药品、上传药品图片、修改药品资料、删除药品、查询药品。 |
主要功能 |
添加药品:检验数据的合法性、保存药品 上传图片:上传药品展示图片 修改药品:修改并保存 删除药品:逻辑删除 查询药品:单一查询、分页查询、全量查询 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.MedicineController service层接口全类名:com.nankai.pharecom.service.IMedicineService service层接口实现全类名:com.nankai.pharecom.service.MedicineService dao层接口全类名:com.nankai.pharecom.dao.IMedicineDao dao层接口实现mapper:com.nankai.pharecom.dao.MedicineMapper
//处理方法 checkPharmacyLegal(Medicine medicine,Model model);//药品信息合法性检验,若存在不合法信息,从model返回给页面 add(Medicine medicine);//添加保存 uploadPic(MultipartFile file,HttpServletRequest request);//上传图片 update(Medicine medicine);//更新并保存 del(int mId);删除药品,逻辑删除,根据mId删除 findById(int mId);//通过mId查询 findByPharmacy(String pId);//通过药店查询 findByName(String name);//通过药品名称查询 findByPage(Medicine medicine,Model model,Page findAll();//查询所有药店 |
表4-24 药店药品管理模块详细设计
模块编号 |
S011-011 |
模块名称 |
药店药品管理 |
模块描述 |
管理药店药品,包括上架药品、下架药品、查询药店药品。 |
主要功能 |
药品上下架管理 药店药品查询 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.PharmacyController service层接口全类名:com.nankai.pharecom.service.IPharmacyService service层接口实现全类名:com.nankai.pharecom.service.PharmacyService dao层接口全类名:com.nankai.pharecom.dao.IPharmacyDao dao层接口实现mapper:com.nankai.pharecom.dao.PharmacyMapper
//处理方法 //修改药店pharmacy中药品medicine的上架状态为shelfStatus updateShelf(Pharmacy pharmacy,Medicine medicine,boolean shelfStatus); findMedicineListByPharmacy(Pharmacy pharmacy);//查询药店的药品列表 |
表4-25 入驻申请模块详细设计
模块编号 |
S011-100 |
模块名称 |
入驻申请 |
模块描述 |
药店管理员向系统管理员提出药店入驻系统的申请 |
主要功能 |
入驻申请 短信提醒 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.PharmacyController service层接口全类名:com.nankai.pharecom.service.IPharmacyService service层接口实现全类名:com.nankai.pharecom.service.PharmacyService dao层接口全类名:com.nankai.pharecom.dao.IPharmacyDao dao层接口实现mapper:com.nankai.pharecom.dao.PharmacyMapper
//处理方法 submission(Pharmacy pharmacy);//提交入职申请 sendMsg(String phone, String msg);//短信提醒系统管理员审核 |
4.4.3.4 地理信息子系统S100
表4-26 药店展示模块详细设计
模块编号 |
S100-001 |
模块名称 |
药店展示 |
模块描述 |
在百度地图上展示附近的药店 |
主要功能 |
获取附近药店的经纬度 在百度地图上展示附近药店 点击某药店可查看该药店和药店的药品信息 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.GISController service层接口全类名:com.nankai.pharecom.service.IGISService service层接口实现全类名:com.nankai.pharecom.service.GISService dao层接口全类名:com.nankai.pharecom.dao.IGISDao dao层接口实现mapper:com.nankai.pharecom.dao.GISMapper
//处理方法 findPharmacyList(String scope);//查找附近的药店列表,获取药店的经纬度 callBaiduMapUsePOI(List findPharmacyById(int pId);//通过药店id查询药店信息 findMedicineListByPId(int pId);//通过药店id查询该药店的药品列表信息 |
表4-27 距离计算模块详细设计
模块编号 |
S100-010 |
模块名称 |
距离计算 |
模块描述 |
计算客户当前位置与药店之间的距离 |
主要功能 |
获取药店经纬度坐标 计算客户当前位置与药店之间的距离 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.GISController service层接口全类名:com.nankai.pharecom.service.IGISService service层接口实现全类名:com.nankai.pharecom.service.GISService dao层接口全类名:com.nankai.pharecom.dao.IGISDao dao层接口实现mapper:com.nankai.pharecom.dao.GISMapper
//处理方法 findPharmacyById(int pId);//通过药店id查询药店信息,获取经纬度坐标 callBaiduMapUseGetDistance(Point pointA, Point pointB);//调用百度地图距离计算方法 |
表4-28 路径规划模块详细设计
模块编号 |
S100-011 |
模块名称 |
路径规划 |
模块描述 |
规划客户当前位置与药店之间的路径 |
主要功能 |
获取药店经纬度坐标 规划客户当前位置与药店之间的路径:步行路径、公交路径、驾车路径 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.GISController service层接口全类名:com.nankai.pharecom.service.IGISService service层接口实现全类名:com.nankai.pharecom.service.GISService dao层接口全类名:com.nankai.pharecom.dao.IGISDao dao层接口实现mapper:com.nankai.pharecom.dao.GISMapper
//处理方法 findPharmacyById(int pId);//通过药店id查询药店信息,获取经纬度坐标 callBaiduMapUseWalkingRoute(Point pointA, Point pointB);//调用百度地图步行路径规划方法 callBaiduMapUseTransitRoute(Point pointA, Point pointB);//调用百度地图公交路径规划方法 callBaiduMapUseDrivingRoute(Point pointA, Point pointB);//调用百度地图驾车路径规划方法 |
4.4.3.5 评论管理子系统S101
表4-29 评论采集模块详细设计
模块编号 |
S101-001 |
模块名称 |
评论采集 |
模块描述 |
采集与统计分析用户评论 |
主要功能 |
采集评论:将用户的评论打到ES服务上 统计分析:对用户评论进行统计分析,如好、中、差评率,药店、药品评价量topN等 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.EvaluateController service层接口全类名:com.nankai.pharecom.service.IEvaluateService service层接口实现全类名:com.nankai.pharecom.service.EvaluateService dao层接口全类名:com.nankai.pharecom.dao.IEvaluateDao dao层接口实现mapper:com.nankai.pharecom.dao.EvaluateMapper
//处理方法 addToES(Evaluate evaluate);//将一条评论打到ES上 addBatchToES(List calPharmacyEvaluateRatioFromES(int pId, String tag);//计算某个药店的好、中、差评率,其中pId为该药店id,tag表示好、中、差评传参 calMedicineEvaluateRatioFromES(int mId, String tag);//计算某个药店的好、中、差评率,其中mId为药品id,tag表示好、中、差评传参 pharmacyEvaluateTopN(int n);//药店评价量topN排名 medicineEvaluateTopN(int n);//药品评价量topN排名 |
表4-30 情感极性分析模块详细设计
模块编号 |
S101-010 |
模块名称 |
情感极性分析 |
模块描述 |
分析用户评论的情感极性 |
主要功能 |
通过情感极性分析算法分析评论文本的情感极性及极性强度 |
算法描述 |
bsa_agorithm算法,算法详见论文2.4小节 |
4.4.3.6 药店推荐子系统S110
表4-31 药店推荐模块详细设计
模块编号 |
S110-001 |
模块名称 |
药店推荐 |
模块描述 |
为用户推荐适合的药店 |
主要功能 |
计算基于协同过于的推荐值 计算基于地理位置的推荐值 计算基于用户评论的推荐值 计算最终推荐值 |
算法描述 |
推荐算法,算法设计详见论文2.5小节 |
4.4.3.7 客户使用子系统S111
表4-32 药店查询模块详细设计
模块编号 |
S111-001 |
模块名称 |
药店查询 |
模块描述 |
用户通过系统查询推荐药店 |
主要功能 |
关键词查询调用推荐算法推荐药店 点击查询结果查看药店详情,包括药店、药品详情和对应的历史用户评论详情和统计 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.FrontController service层接口全类名:com.nankai.pharecom.service.IFrontService service层接口实现全类名:com.nankai.pharecom.service.FrontService dao层接口全类名:com.nankai.pharecom.dao.IFrontDao dao层接口实现mapper:com.nankai.pharecom.dao.FrontMapper
//处理方法 findPharmacyByKeyWords(List findPharmacyById(int pId);//通过药店id查询获取药店信息 findMedicineListByPharmacy(int pId);//通过药店id查询获取药店上架的药品信息 findEvaluateListByPharmacyAndMedicine(int pId, int mId);//获取推荐的药店和药品组合的历史用户评论列表 calEvaluateRatio(int pId,int mId, String tag);//计算推荐药店与药品的好、中、差评率,其中pId为该药店id,mId为药品id,tag表示好、中、差评传参
|
表4-33 药店导航模块详细设计
模块编号 |
S111-010 |
模块名称 |
药店导航 |
模块描述 |
为用户从当前位置导航至推荐药店 |
主要功能 |
调用百度地图API,按照步行、公交、驾车三种方案进行导航 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.FrontController service层接口全类名:com.nankai.pharecom.service.IFrontService service层接口实现全类名:com.nankai.pharecom.service.FrontService dao层接口全类名:com.nankai.pharecom.dao.IFrontDao dao层接口实现mapper:com.nankai.pharecom.dao.FrontMapper
//处理方法 findPharmacyById(int pId);//通过药店id查询药店信息,获取经纬度坐标 callBaiduMapUseWalkingRoute(Point pointA, Point pointB);//调用百度地图步行导航方法 callBaiduMapUseTransitRoute(Point pointA, Point pointB);//调用百度地图公交导航方法 callBaiduMapUseDrivingRoute(Point pointA, Point pointB);//调用百度地图驾车导航方法 |
表4-34 用户评论模块详细设计
模块编号 |
S111-011 |
模块名称 |
用户评论 |
模块描述 |
用户评论推荐的药店和药品 |
主要功能 |
用户评论与保存 |
算法描述 |
web层处理全类名:com.nankai.pharecom.web.FrontController service层接口全类名:com.nankai.pharecom.service.IFrontService service层接口实现全类名:com.nankai.pharecom.service.FrontService dao层接口全类名:com.nankai.pharecom.dao.IFrontDao dao层接口实现mapper:com.nankai.pharecom.dao.FrontMapper
//处理方法 addEvaluate(Evaluate evaluate,int pId,int mId);//添加药店、药品的评论 |
系统分为客户前端和管理后台,客户前端主主要为用户提供服务,以移动端页面为主,管理后台主要为管理员(包括系统管理员与药店管理员)提供系统管理服务和药店药品管理服务等。
用户登录分管理员登录和普通用户登录,管理员登录组要通过PC端登录,普通用于主要从移动端登录,其登录界面分别如图5-1和图5-1所示。
图5-1 PC端管理员登录界面
图5-2 移动端普通用户登录界面
用户登录系统后,根据不同的角色,展现出对应的功能界面,提供相应的服务。
普通用户登录成功后会,将跳转至客户端首页,如图5-3所示。首页包括系统logo,附近的药店幻灯片切换以及主要的功能菜单,包括附近药店、药店推荐、用户评论以及个人中心。
图5-3 普通用户系统首页 图5-4 附近的药店
点击进入【附近药店】,系统将根据用户所在的定位,展示附近已入驻本系统的药店,如图5-4所示界面。图中即展示南开大学附近入驻的和平药店、敬一堂、正天药店等。点击界面上方“<”图标可返回上一级页面,本处即返回首页。
返回首页后,点击【药店推荐】,进入药店推荐功能页面,可根据症状需求,输入关键词,如感冒、风热,点击【搜索】按钮,系统将推荐1-3个适合用户需求的药店(推荐算法详见2.5小结。),并按照推荐指数降序排列,排名越靠前,推荐指数越高,如图5-5所示。
图5-5 药店推荐页面 图5-6 药店推荐药品详情
点击查某个推荐药店项上的【详情】按钮,可查看推荐的具体药品,如点击【正天药店】项右下角的【详情】按钮,即跳转至药品推荐详情页,如图5-6所示,可以看到推荐了复方穿心莲片、抗病毒口服液等用于治疗风热感冒的药品,并显示有药品的价格和主要功能等,用户可根据需求进行参考选择。
若用户不熟悉当地地理环境,不知道如何到达推荐的药店,可点击对应想去的推荐药店右下方的【导航】按钮,系统将会为用户规划路线,并可提供导航服务,如图5-7所示,用户可选择驾车、步行、公交三种不同方案,图中显示的为驾车导航方案。
图5-7 药店推荐页面 图5-8 药店评价列表
用户可通过查看历史用户评论,为选择更为合适和优质的药店。返回首页后,点击【用户评论】,系统将跳转至药店评价列表,采用分页展示,排列顺序按照距离降序排列,如图5-8所示。可通过点击列表中某一项查看某个药店的具体评价详情,如图5-9所示,查看老百姓大药房各药品的评价详情。评论列表可按照最新、人气、最早三种模式展示,默认最新模式。
图5-9 药店药品评价详 图5-10 个人中心
【个人中心】可设置上传自己的图像,昵称等信息,也可查看我的浏览足迹,通过系统关键词搜索后推荐的方案,以及方案的评价等,如图5-10所示。点击【推荐的药店】,进入我的方案页面,即当前使用系统关键词搜索推荐过的方案。
图5-9 药店药品评价详请 图5-10 评价页面
用户可以对未评价推荐的方案进行评价,点击【评价】按钮,已评价过的方案的按钮则会变为灰色的【已评】。如点击图5-9第一项的评价按钮,即跳转至该方案的评价页面,选择好评、中评或差评,并填写详细评价后点击【提交评价】按钮即可提交本次评价,之后也可在【用户评论】模块中对应药店下查看到该评论。
系统管理员拥有系统后台管理的最高权限,负责系统业务方面的主要运维工作,包括系统管理和药店药品管理两个方面,其中系统管理包括资源管理、角色及角色权限管理、用户管理、系统日志查看,药店药品管理包括药店管理和药品管理。
系统管理员成功登录系统后,将跳转至如图5-11展示系统运营相关数据和服务器相关性能指标的系统首页。
图5-11 系统管理员首页
首页左侧主要是系统菜单栏,此外展示了系统logo以及用户头像等信息。菜单栏右边为系统数据面板,包括系统实时在线人数、今日方案推荐数、已入驻系统的药店数、近一周系统访问量走势、评价等级统计、系统运行状况以及服务器基本信息。用户通过点击左侧菜单栏的各个菜单切换系统功能,系统管理员的功能菜单如图5-12所示。
图5-12 系统管理员功能菜单
【资源管理】功能主要管理系统的菜单、按钮等系统资源,便于之后的权限管理。资源管理包括资源的查看、新增、修改和删除,以资源树和资源列表的形式进行展示,资源树上的每个节点对应一个菜单,节点的层级代表菜单的层级,资源列表中为对应菜单(节点)上的子菜单或按钮资源。点击资源树的某一节点(菜单资源),资源列表展示该节点下对应的子菜单或按钮等资源,如图5-13所示。
图5-13 资源管理
【角色管理】功能主要关系系统角色和角色权限管理,具体包括角色的增删改查操作以及角色权限的分配。角色管理界面如图5-14所示。
图5-14 角色管理
角色权限管理,即为角色分配资源,在角色新增时即要为该角色分配相应的权限,若需修改角色的权限则通过角色修改功能可以实现,角色权限资源分配如图5-15所示。
图5-15 角色权限管理
本系统暂未提供系统注册功能,主要通过【用户管理】功能管理系统用户,该功能可对用户进行常规的增删改查操作,也可锁定和解锁用户。如图5-16所示。
图5-16 用户管理
系统管理员可通过查看系统日志,监控用户操作系统行为。点击【系统日志】菜单,即可进入日志查看页面,可查看和删除日志,如图5-17所示。
图5-17 系统日志
药店管理方面,点击【药店药品管理】菜单下的【药店管理】菜单,进入药店管理界面。系统管理员可新增、编辑、删除、查看药店,还可选中需要审核的药店点击【审核入驻】按钮,审核申请入驻本系统的药店,药店管理列表如图5-18所示。
图5-18 系统管理员药店管理列表
新增/编辑药店界面类似,如图5-19所示。区别在于若是新增药店,该界面的药店信息字段均为空,需要填必要字段后才能提交保存;若是编辑药店,则系统会自动带出该药店的信息,只需修改需要修改的信息提交保存即可。其中,药店图片属性可上传1-5张关于药店的图片。
图5-19 药店新增/编辑
系统管理员的【药品管理】功能,即是管理可供药店上架出售的药品,维护药品信息,可对药品信息进行增删改查操作,如图5-20所示。
图5-20 系统管理员药品管理列表
药品新增/编辑与药店新增/编辑功能操作相似,其中药品图片属性可上传1-3张关于该药品的图片,如图5-21所示。
图5-21 药品新增/编辑
药点管理员主要工作是管理本单位的药店和药品。
药店管理方面,药店管理员可对本单位的药店进行增删改查操作,也可对未入驻本系统的药店提出入驻申请,如图5-22所示。
图5-22 药店管理员药店管理
药品管理方面,主要是上下架本店的药品,可上下架的药品清单来至于系统管理员的药品管理,管理界面如图5-23所示。
图5-23 药店管理员药品上下架管理
药店管理员可通过查找需上下架的药品,进行相应的上下架操作。其中,药品上架需要指定该药品在本药店的单价和所在货位号,如图5-24所示。
图5-24 药品上架
本文首先分析了当前社会环境下药店现状及遇到的问题,特别是互联网的到来对药店的冲击与影响;提出了为满足消费者个性化的购买药品需求,将GIS技术、评论挖掘与分析算法、推荐算法整合到药店管理系统中,形成互联网+药店推荐系统;研究了管理信息系统、Web GIS技术、网络文本评论挖掘与分析算法、推荐算法的研究现状;设计并实现了互联网+药店推荐系统。
本系统的实现主要用Java语言开发,采用了当前流行的开源框架和技术,并融合Web GIS技术、情感分析算法(bsa_agorithm)和本文提供的推荐算法;数据存储采用MySQL和Elasticsearch,Elasticsearch用于存储用户行为和用户评价等数据量较大的数据,便于查询、检索和分析,其他系统数据存储在MySQL数据库。该系统包括用户登录子系统、后台管理子系统、药店管理子系统、地理信息子系统、评论管理子系统、药店推荐子系统和客户使用子系统。
本系统以目前先进的互联网技术为支撑,设计与实现了一套完整了互联网+药店推荐系统流程。系统的主要优点如下:
随着互联网技术的更深入发展以及互联网+时代的到来,更多的互联网先进技术,如物联网、人工智能、大数据、云计算、区块链等,将会应用于生活的方方面面,为人们的生活带来方便。同样,我们的互联网+药店系统还有许多值得完善的地方,主要总结一下为3个方面: