互联网+药店推荐系统的设计与实现

论文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,情感分析,互联网+

 

 

 

 

 

Abstract

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

 

1  绪论

    1.  研究背景与意义
      1. 研究背景

随着社会经济的发展,城市化进程的加快,越来越多的药店慢慢进入人们的视线。在“大病进医院,小病上药店”的医药消费模式下,近些年来药店数量猛增。相对于日益增长的药店来说,传统小诊所的数量却在慢慢减少。调查发现,产生该现象的原因主要包括以下几个方面:

  • 相对于开设诊所,经营药店门槛较低,费用较低;
  • 经营药店风险低,只要按规定经营,不会出现什么重大问题
  • 看病贵,很多人小病选择在药店买药;
  • 药店买药方便,去医院或诊所麻烦且看病流程复杂,费时费力;
  • 药店需求旺盛,利润高。

药店给人们看病带来了极大的方便的同时,也带来了很大的困扰,消费者在需要买药时,时常有如下困惑:

  • 药店太多,药店等级参差不齐,该怎么选择?
  • 地理环境不熟悉,不清楚药店的具体位置,要怎么快速到达想去的药店?
  • 面对种类繁多的药目,琳琅满目的药品,该如何选择?
  • 药剂师推荐的药实惠吗?怎么才不会被宰?

本论文的研究即是希望通过互联网+药店推荐系统解决消费者去药店买药的困惑。

      1. 研究目的与意义

随着互联网技术的飞速发展,我们逐渐从信息匮乏的时代很快步入了信息过载的时代。我们将药店定义为信息的生产者,将买药的患者定义为信息的消费者。

目前,无论是信息的生产者还是信息的消费者都遭遇到了非常大的挑战。作为信息消费者,如何从大量的药店中挑选出自己满意的药店,如何从海量的药品中挑选出对症的药品是一件很困难的事;作为信息的生产者,如何让药店和药店的药品信息脱颖而出,受到消费者的广泛关注,同样是一件十分困难的事。

本论文研究的主要目的就是为了解决药店与消费者的这一矛盾,通过联系消费者和药店信息,一方面帮助消费者发现对自己有价值的药店、药品信息,另一方面让药店和药店信息能够更有效的展现在对它感兴趣的消费者面前,从而实现药店和消费者的双赢。

为满足消费者个性化的购买药品需求,我们将GIS(Geographic Information Systems,地理信息系统)技术、评论挖掘与分析算法、推荐算法整合到药店管理系统中,形成互联网+药店推荐系统。用户使用该系统输入个性化查找需求,系统通过整合用户需求、药店药目信息、药店位置信息、药店评论信息、历史用户记录等,为用户推荐最为合适的1-3个药店,并罗列出推荐药品列表。客户选中推荐的药店后,可以通过本系统导航至该药店进行药品购买。互联网+药店推荐系统为消费者提供了便捷且更可靠的购药解决方案。

    1.  研究现状
      1.  管理信息系统研究现状

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)

闭环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

顺利运作的计算机集成制造系统的发展面临三大挑战:

  • 集成来自不同供应商的组件:当不同的机器(如传送带、机器人等)使用不同的通信协议可能会导致系统集成面临较大困境。
  • 数据完整性:自动化程度越高,用于控制机器的数据的完整性就越关键。虽然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]。本系统在前人基础上设计和实现药店及药品基础信息的管理、药店和药品评价管理等,其基础数据即是用于给消费者推荐药店药品数据的直接或间接来源。

      1.  Web GIS应用现状

地理信息系统(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的平台性更好。

      1.  网络文本评论挖掘与分析研究现状

网络文本评论挖掘,或称意见挖掘,即是面向网络文本,分析出有用的意见信息或知识。主要应用包括:①产品(电商商品)评论挖掘;②舆情分析等。

产品评论挖掘方面,通过分析用户评价,可进行商品推荐或作为产品(服务)改进的参考依据。许祥军等[45]认为挖掘网络评论能够为产品开发提供有用的信息,他们结合了几个经典的文本挖掘方法包括词频统计、点互信息算法、词频-逆文档频率作为特诊提取的方法,并通过情感分析和情感强度分析提出了面向产品开发的评论挖掘方案。程惠华等[46]通过挖掘产品评论,并进行情感倾向性分析,得出用户对产品的满意度。李涵昱等[47]认为挖掘商品评论,对分析商品口碑、进行商品推荐有十分重要的价值。黄秋义等[48]运用网络爬虫技术爬取商品评论信息,采用语义分析和数学统计方法进行情感倾向性分析,实现了面向电商平台的意见挖掘模型。刘紫玉等[49]研究了基于消费者评论挖掘的B2C网购物流服务因素类型和作用机制,设计了物流服务质量的作用方案,该方案对改善电商企业物流服务质量、提高竞争力能够发挥重大作用。郑玉桂[50]则针对电商评论,加入了句子级的细颗粒度的情感倾向性分析,不仅可以分析整篇评论的情感极性,也可以分析出评价实体的情感极性。郗亚辉[51]研究了产品评论中的特征同义词识别方法,选取了must-link和can-not-link两类约束,并采用了层次聚类算法。陈义[52]通过分析天猫商城和京东商城用户对手机的评论发现,天猫商城的用户更在意手机的性价比和购物体验,而京东商城的用于则更在意手机的整体性能。

舆情分析方面,我们将其分为社会舆情分析和企业舆情分析。

社会舆情分析,通过挖掘分析突发事件、热门话题等网络评论文本,了解网民所持的态度,有助于民心,也有利于舆情预警和导向,有利于国家安全和社会稳定。傅黎犁等[53]以“毒胶囊”事件为案例进行了舆情检测和分析,探讨了医学情报机构如何在突发事件中进行舆情分析。张瑜等[54]以微博热议话题“背景单双号限行常态化”为例,研究了社交媒体舆情分析方法,并将主体分类模型引入舆情分析之中,以时间为脉络进行面向主题的情感分析,为舆情分析提供了对象和时点选择的建议。宋铁等[55]通过监测几件突发公共卫生事件的网络舆情,认为舆情监测系统是现代疾病控制工作的一个重要手段,是疫情监测的有效的辅助手段。李斅葳[56]采用数据挖掘、关联分析、聚类分析等技术和算法,设计了基于敏感信息的意见挖掘方案。姜胜洪[57]研究了网络谣言的形成、传导与舆论导向机制,为降低网络谣言的危害,建议政府加强网络舆情分析判研,加快培养意见领袖等意见。

企业舆情分析,通过挖掘分析用户对企业或竞争对手评论,为企业提供危机负面监测,有利于市场数据调研、品牌营销分析、品牌形象维护等。陈元等[58]构建企业竞争情报挖掘模型,从用户评论中获取产品竞争情报,并应用于企业产品的分析。石进等[59]认为随着互联网的发展,舆情对企业影响越来越大,舆情监控系统是企业竞争情报必不可少的一部分。叶水茂[60]针对企业如何提升危机管理和舆情应对能力,如何在舆论导向中转“危”为“机”等问题提出了应对的方案。

本系统主要通过挖掘用户病因与药品选择关联关系和挖掘对药店、药品的评论,分析出病因、药店、药品选择的最佳组合方式,作为药店推荐的主要参考数据之一。

      1.  推荐算法研究现状

目前,学者对于推荐算法的研究主要分为以下四个方面:①基于内容的推荐算法;②协同过滤推荐算法;③基于知识的推荐算法;④混合推荐算法。

基于内容的推荐算法,例如个性化新闻推荐、给用户打上个性化标签、依据用户喜好等。刘世杰等[61]分析了网络新闻推荐的策略,研究了推荐系统模型,总结了基于个性化新闻推荐的方法。黄志强[62]提出了一种层次化标签推荐算法,使用余弦相似度计算标签的相似性,从而为物品添加精确度更高的标签。张东伟[63]研究了面向用户偏好的包推荐算法,为准确区分用户的相似度,提出了一种基于灰色关联的相似度计算方法,为降低推荐算法复杂度,提出了基于效用的包推荐算法,提高了推荐结果的质量。

协同过滤推荐算法,简单理解即是“物以类聚、人以群分”,具有相似属性的人或物具有相似的需求。协同过滤算法分为两种,一种为基于用户的协同过滤算法,一种为基于物品的协同过滤算法。

基于用户的协同过滤算法方面,贺桂和[64]设计了一种基于用户偏好挖掘的电子商务协同过滤推荐算法。该算法利用用户偏好挖掘技术进行用户显性偏好知识和隐性偏好知识的挖掘分析,实现基于用户偏好知识的最近邻居社区构建和智能推荐。韩亚楠等[65]通过用户属性偏好和项目流行度计算用户对项目的偏好度,并将基于时间的兴趣度权重函数和偏好度引入到项目相似度计算和推荐过程中,确定项目最近邻集合,从而实现最优推荐。杨大鑫等[66]认识到传统协同过滤算法在处理的数据时存在数据稀疏性和扩展性不佳等问题,提出利用Weighted Slope One算法缓解其数据稀疏性,利用基于最小方差的K-means算法提高其扩展性。

基于物品的协同过滤算法方面,卜旭松[67]面对海量的视频资源,对视频相似度和用户偏好进行计算,提出了改进的基于物品协同过滤推荐算法。吴玺煜等[68]使用知识图谱表示学习方法通过计算物品之间的语义相似性,将物品自身的语义信息融入协同过滤推荐。算法弥补了协同过滤算法没有考虑物品本身内涵知识的缺陷,在语义层面上增强了协同过滤推荐的效果。李琳娜等[69]认为物品之间的相似关系具传递性,提出基于启发式的物品相似度传播的协同过滤推荐方法。

基于知识的推荐算法,这种方法比较典型的是构建领域本体,或者是建立一定的规则,进行推荐。曾维明[70]通过引入语义网和本体的技术,构建基于本体的语义检索系统,并基于电影语义检索系统的需求,提出基于本体的个性化推荐算法。何明等[71]为了提高个性化推荐效率和推荐质量,平衡冷门与热门数据推荐权重,改进了基于关联规则的Apriori算法,设计了基于k前项频繁项集的剪枝方法,该方案提高了频繁项集的提取效率,拥有较高的推荐非空率、调和平均值和推荐准确率,有效地平衡了冷、热门数据的推荐权重。

混合推荐算法,顾名思义该方法会以加权或者串联、并联等方式融合以上方法。金紫嫣等[72]将标签推荐技术与协同过滤算法融合,提出一种新的混合式广告推荐算法,将广告关键词作为标签引入到Query页的相似性计算中,建立一种基于广告关键词的搜索广告兴趣模型。使用Top-N策略以减少最近邻候选集的大小,并基于预测CTR筛选出广告推荐结果。陈平华等[73]提出一种结合关联规则的协同过滤改进算法,首先挖掘项目之间的强关联规则,接着,将强关联规则过滤和拆分;最后将拆分后的强关联规则集成到相似度矩阵中,该算法提高了推荐系统准确性、有效性和适用性。

本系统采用混合推荐算法,该算法将症状关键词、用户评价、药店地理位置等因素,融入协同过滤推荐算法之中,形成互联网+药店推荐算法。

    1.  研究内容

药店及药品信息管理:将药店抽象为对象,一个对象具有很多属性,本论文需要研究用户关心哪些属性,我们需要采集哪些属性。同理,药品信息的属性也非常多,需要对这些属性进行筛选。

权限管理:一个应用系统的权限的管理非常重要,用户角色不同,权限不同,对应的功能也就不同。

数据存储技术:目前主要的关系型数据库有MYSQL、SQL SEVER、ORACLE三种。本论文需要研究关系型数据库是否能满足本系统所有数据存储要求。其中,药品评论数据量级可能较大,选择何种存储方式能提高查询和分析效率。

地图上兴趣点的标注展示与导航:药店即为本系统地图上的兴趣点,我们需要研究如何将兴趣点更友好的展示给用户,如何从用户所在位置导航至其选择的药店位置。

评论文本情感极性分析:本系统的评论文本来至用户对药店、药品的评论。如何分析评论的情感极性以及如何展示给用户是本论文需要研究的内容。

推荐算法:当用户输入关键词后,如何将最合适的药店和药品推荐给用户是本论文需要研究的内容。

    1.  本论文的结构安排

本论文各章节内容安排如下:

第1章:绪论。主要介绍本文的研究背景与意义;分析管理信息系统、Web GIS、网络文本评论挖掘与分析、推荐算法的研究现状,并分别引出本文的方法的思想;介绍本文的研究内容和论文的结构安排。

第2章:相关技术与算法。主要介绍系统的开发语言及基础框架、数据存储技术、地理信息技术、评论文本情感极性分析技术、推荐算法和权限及安全验证技术。

第3章:互联网+药店推荐系统需求分析。主要进行可行性分析、需求分析、系统组织架构分析、系统功能需求分析、用户使用需求分析、业务流程分析。

第4章:系统设计。包括总体设计、概要设计、数据库设计、详细设计。

第5章:主要功能展示。包括用户登录功能展示、普通用户功能展示、系统管理员功能展示和药店管理员功能展示。

第6章:结论与展望。总结了本文工作,并指出了系统存在的不足和后续的改进方向。

2  相关技术与算法

2.1 开发语言及基础框架

系统主要采用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的搜索服务器,千万级量数据量查询与分析可到毫秒级

2.2 数据存储技术

本系统数据存储主要用MySQL数据库,用户评论信息数据量较大,采用分布式文档存储技术Elasticsearch。

2.2.1 为何选择MySQL

MySQL是一个开源的关系型数据库管理系统,使用SQL进行数据库管理,与Oracle、SQLServer、DB2等大型关系型数据库,其功能相对较弱。其主要特点包括:

  • 开源,几乎免费,使用成本和维护成本较低;
  • 可处理千万级大型数据;
  • 跨平台,可移植性好,支持Windows、Linux、MAC等多种操作系统;
  • 支持多种语言,为C、C++、Python、Java、Perl、PHP、Ruby等多种编程语言提供了API;
  • 支持SQL语法规范。

MySQL应用十分广泛,大多数互联网公司数据库都是用的MySQL或者有用MySQL,如淘宝、京东、腾讯、百度等,特别是采用PHP开发的应用几乎都是用MySQL。

2.2.2 Elasticsearch技术简介

Elasticsearch简称ES,它基于Lucene,是一种开源的实时分布式搜索和分析引擎,可提供数据存储服务、搜索服务和实时数据分析服务。其主要特点是:

  • 它是分布式的文档存储引擎,分也是布式的搜索引擎和分析引擎;
  • 可以作为一个大型分布式集群技术,处理PB级数据,服务大型应用系统;也可以运行在单机上,服务中小型应用;
  • 对用户而言,是开箱即用的,非常简单,作为中小型的应用,直接3分钟部署一下ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂。

主要应用场景有:

  • 维基百科,实现了全文检索,高亮检索,搜索推荐;
  • 数据分析,如用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),分析每篇新闻的公众反馈(好,坏,热门,垃圾,鄙视,崇拜);
  • 日志数据分析,logstash采集日志,ES进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana);
  • BI系统,商业智能,ES执行数据分析和挖掘,Kibana进行数据可视化;
  • 电商网站,检索商品;
  • 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户;
  • GitHub(开源代码管理),搜索上千亿行代码。

本系统属于ES的简单应用,搭建单节点的ES服务器,用于存储用户的行为和对药店、药品的评论,进行分析,并提供查询检索功能,展示给用户。

2.3 地理信息技术

百度地图API是一套为开发者免费提供的基于百度地图的应用程序接口,包括JavaScript、IOS、Android、静态地图、Web服务等多种版本,提供基本地图、位置搜索、周边搜索、公交驾车导航、定位服务、地理编码及逆地理编码等丰富功能。

本系统采用百度地图JavaScript API,它是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构建功能丰富、交互性强的地图应用,支持PC端和移动端基于浏览器的地图应用开发,且支持HTML5特性的地图开发。

百度地图快速开发步骤如下:

  1. 申请百度账号和ak;
  2. 根据HTML标准,创建一份基于HTML5的页面,使用最新的符合HTML5规范的文档声明

<!DOCTYPE html>

  1. 添加一个meta标签,以便页面更好的在移动平台上展示

<meta name="viewport" content="initial-scale=1.0,

user-scalable=no" />

  1. 设置容器大小,使地图充满整个浏览器窗口

<style type="text/css">  

    html{height:100%}    

    body{height:100%;margin:0px;padding:0px}    

#container{height:100%}    

</style>

  1. 引用百度地图API文件

<script type="text/javascript"

src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥">

</script>

  1. 创建一个div元素作为百度地图容器元素

<div id="container"></div>

  1. 通过new操作符可以创建一个地图实例,参数可以是元素id也可以是元素对象

var map = new BMap.Map("container");

  1. 设置中心点坐标

//其中117.175215表示经度,39.109359表示纬度。(为南开大学坐标)

var point = new BMap.Point(117.175215,39.109359);

  1. 地图初始化,同时设置地图展示级别

map.centerAndZoom(point, 15);  

至此,我们就快速创建了一张以南开大学为中心的地图,如图2-1所示。

图2-1 以南开大学为中心地图(百度API开发)

本系统后续的地图开发,均基于此地图。

2.4 评论文本情感极性分析技术

本系统采用一款开源、免费的情感分析工具[74],进行用户对药店、药品评论的情感极性分析。该工具采用Python语言开发,实现了使用一种基本算法来预测文章的情感。经过测试,基本满足对本系统情感极性分析的需求,且准确度可以信赖。其具体功能如下:

  • 基于python-jieba中文分词包,对文章和句子进行分词;
  • 使用大连理工大学情感分析词库,对文章分词结果进行词语的情感预测;
  • 使用bsa_agorithm作为基本情感极性分析算法,基于词语的情感预测来聚合整条评论的情感倾向和情感强度。

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字段,是整体的情感得分;
  • score_comment字段,是对score含义的注释,正:正向情感;负:负向情感。情感值越大,情感越强;
  • details字段,详细的介绍了文本体现出的每个子情感分类的情感度,meaning字段表示子分类,strength表示这个子分类的情感度。

本系统只处理score字段,处理整体的情感得分,获取整体情感极性及极性强度,暂不处理details字段,不处理子情感分类。

2.5 推荐算法

采用基于地理位置和评价的协同过滤推荐算法,实现药品和药店的推荐。主要步骤如下:

步骤1:计算基于协同过于的推荐值,采用词频-逆文件频率(Term Frequency-Inverse Document Frequency, TD-IDF)算法,药品、药店的关键词组和用户输入的关键词组为维度,建立向量空间模型,计算用户维度与各药店、药品维度的余弦相似度,该值即作为基于协同过于的推荐值,的取值范围为[-1,1];

步骤2:计算基于地理位置的推荐值,计算方法如公式(1)所示。其中x表示用户位置与药店位置之间的距离,a表示阈值距离,当x<a时推荐值为正,当x>a时推荐值为负,本系统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<String[]>(); //文档内容

private static HashMap<String, Float> []tdidf;   //TDIDF值

private static int leng[]; //文档词数

private static float film[]; //词向量的模

 

//获取所有文档,即获取用户查找关键词和所有药品、药店关键词记录

doc=getAllDoc();

 

//计算TDIDF值

public static void calTdidf(){

long a = System.currentTimeMillis();

 

HashMap<String, Float> []tmp_tdidf = new HashMap[len];

 

int size;

int n = 0;

String str;

HashMap<String,Integer> idf = new HashMap<String, Integer>();

for(String d[]:doc){

size = d.length;

leng[n] = size; //文档词数

HashMap<String, Float> td = new HashMap<String, Float>();

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<String, Float> td = new HashMap<String, Float>();

 

ValueComparator bvc =  new ValueComparator(tmp_tdidf[i]);  

TreeMap<String,Float> sorted_map = new TreeMap<String,Float>(bvc);  

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<String> {  

  

Map<String, Float> base;  

public ValueComparator(Map<String, Float> base) {  

this.base = base;  

}  

 

//按values降序

public int compare(String a, String b) {  

if (base.get(a) >= base.get(b)) {  

return -1;  

} else {  

return 1;  

}

}  

}  

2.6 权限及安全验证技术

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页面权限控制实例:

<div class="page-header">

<shiro:hasPermission name="role:add">

<button id="btnAdd" type="button" οnclick="addModel('/role/addUI.html')" class="btn btn-primary btn-sm">

   <i class="fa fa-plus"></i> 添加

</button>

</shiro:hasPermission>

<shiro:hasPermission name="role:edit">

<button id="btnEdit" type="button" οnclick="editModel('/role/editUI.html')" class="btn btn-success btn-sm">

 <i class="fa fa-pencil-square-o"></i> 编辑

</button>

</shiro:hasPermission>

<shiro:hasPermission name="role:deleteBatch">

<button id="btnDel" type="button" οnclick="delModel('/role/deleteBatch.html', customSearch)" class="btn btn-danger btn-sm">

<i class="fa fa-trash-o"></i> 删除

</button>

</shiro:hasPermission>

<shiro:hasPermission name="role:permission">

<button id="btnSetResource" type="button" οnclick="editModel('/role/permissionUI.html')" class="btn btn-info btn-sm">

<i class="fa fa-gears"></i> 分配权限

</button>

</shiro:hasPermission>

</div>

3  互联网+药店推荐系统需求分析

3.1 可行性分析

3.1.1 经济可行性分析

本系统成本主要来自于技术学习成本、系统开发成本以及运行和维护成本。作为毕业设计,主要成本开销在于运行和维护的开销。本系统搭建在阿里云,一方面,阿里云对于学生购买服务有较大的优惠;另一方面,阿里云团队接管了绝大多数运维工作。因此,总体成本开销可以控制在可承受范围之内。

 效益方面,本系统作为药店推荐系统,用户通过使用本系统可在很大程度上提高其药店选择和药品购买的效率,且可以买到更加合适的药品,节省了用户的时间成本。

 因此,本系统在经济上是可行的。

3.1.2 技术可行性分析

根据系统功能和设计,本系统采用基于Java语言开发,前后端采用当前流行的开源框架,数据库以MySQL为主,情感极性分析采用了一个开源的基础算法,推荐算法思想和实现步骤均已设计完备,可基于Java开发实现。

 综上,本系统的框架均采用成熟的开源框架,核心技术和算法的技术储备也已完备,可基于这些技术开发出完整的”互联网+药店推荐系统“,因此,本系统在技术层面上是完全可行的。

3.1.3 操作可行性分析

系统采用B/S架构,服务端部署在阿里云,阿里云强大的技术团队可为本系统提供有力的技术支撑。客户端前端采用H5技术,能够便捷的在手机等移动设备上使用,且系统界面友好、操作简单、布局合理,用户很容易掌握操作要领。因此,从操作层面分析本系统是可行的。

3.2 需求分析

3.2.1 业务需求分析

 将本系统主要的业务场景划分为用户模块、管理员模块和定时分析模块,业务需求如图3-1所示。

图3-1 业务需求分析

普通用户主要业务操作包括可以通过客户端查询药店、药品信息,系统通过用户查询,在地图上展示药店,并推荐最合适的药店,可进行路程规划和导航至推荐药店,用户可对药品、药店进行评价。

药店管理员主要业务操作包括维护本药店信息和本药店的药品信息。

系统管理员主要业务操作包括可对整个系统进行管理,包括基础信息、角色权限等,管理员可通过系统管理药店和药品信息,可管理用户和用户的评价等。

定时分析即是对用户评论进行采集和极性分析。

3.2.2 系统软件需求分析

互联网+药店推荐系统的需求分析在具体操作过程中涉及到功能性需求与非功能性需求两大主要的内容,如表 3-1 所示。

表 3-1 功能性需求和非功能性需求表

功能性需求

非功能性需求

(1)用户可通过系统查询药店、药品信息; (2)系统可通过用户输入症状,推荐药品、药店;(3)用户可以通过系统导航至推荐药店;(4) 用户可对药店、药品进行评价;(5)管理员可以管理药店药品信息;(6)管理员可对系统进行基础管理,如系统权限管理等;(7)管理员可对用户评价进行管理;(8)系统可对用户评价进行分析和展示。

(1)优化系统和数据结构,将系统的响应时间控制在毫秒级;(2)确保系统的可靠性,保证系统7*24小时可提供服务;(3)界面友好,适用于手机等移动设备,易操作。

3.2.3 系统运行环境需求分析

系统主要运行在PC端和移动端。管理员后台管理主要在PC端,用户使用主要在移动端。系统采用的是B/S架构,客户端只需要安装浏览器并连通网络即可以使用本系统,其中用户端要还需适应Android、IOS等操作系统,前端需适配不同屏幕规格的手机、平板等移动设备。

3.3 系统功能需求分析

随着互联网时代的到来,互联网技术已深入到社会生活的各个领域。本系统将互联网技术、地理信息技术、情感极性分析技术、智能推荐技术与药店管理相结合,形成互联网+药店推荐系统。本系统旨在为购药者快速提供最适合的购药方案,减少消费者挑选的时间开销和成本开销。本系统一方面帮助消费者发现对自己有价值的药店、药品信息,并能提供最优路线方案到达推荐的药店购药;另一方面让药店和药店信息能够更有效的展现在对它感兴趣的消费者面前,从而实现药店和消费者的双赢。

3.4 用户使用需求分析

将系统的用户分为3类角色:普通用户、药店管理者、系统管理者。

普通用户作为系统的直接受益者,主要可通过系统可查询附近药店的分布情况、药店等级、药店药品情况、开关门时间、是否支持医保等;可通过输入症状关键词推荐最合适的药品和药店;可根据选中的药店规划路径并导航至该药店;可查看历史用户对目标药店、药品的评价;可根据评价分析药店、药品的整体好评率等。

药店管理者可申请入驻本系统,入驻后可进行药店管理,包括药店信息维护,药店药品信息的维护等。

系统管理者可对系统进行基础管理,如基础信息维护、权限分配等;可审核药店入驻申请;可直接添加新的药店和所添加药店的药品;可管理用户及用户的评论;可查看各类统计分析报表等。

4  系统设计

4.1 总体设计

本系统结合了互联网行业先进理念,将数据分析、人工智能、GIS等先进技术引入管理信息系统,形成了一套完整的互联网+药店推荐系统解决方案。在系统设计中,需要具有前瞻性,充分考虑系统的可扩展性,注重用户体验,不断优化改进,使用该系统能够真正给用户带来方便和实惠。

4.1.1 系统设计原则

互联网+药店推荐系统属于互联网产品,因此在设计时遵循一般互联网产品设计的原则:

  • 免费性原则。免费是互联网产品的一大特性,本系统对所有普通用户完全免费,只针对入驻的药店收取入驻费和推广费,产品升级后增加广告模块可收取广告费。
  • 注重用户体验。以用户为中心,注重人性化设计,方便用户使用,同同时保证产品的实用性,切实能为用户提供有价值的服务,保证系统的稳定性。
  • 先进性原则。使用先进的技术和理念,开拓创新性思维,持续为用户提供高科技感的体验,让用户享受科技带来的便利。
  • 可扩展性和可维护性原则。为了方便系统的升级和维护,注重代码规范和标准。
  • 可靠性和安全性原则。保护用户的隐私,加强安全性管理,能够抵御不法分子采用不正当手段对系统的攻击。

4.1.2 系统设计总体目标

本系统的最终目标是为需要买药的消费者提供最合适的购药方案,节省消费者因选择性困难造成的时间浪费,为消费者带来方便和实惠。

4.1.3 系统设计总体架构

系统设计的总体架构如图4-1所示。

图4-1 系统设计总体架构图

4.2 概要设计

4.2.1 模块划分

为使系统架构更加清晰,将互联网+药店推荐系统划分为用户登录模块、后台管理模块、药店管理模块、地理信息模块、评论管理模块、药店推荐模块、客户使用模块。系统组织架构图如图4-2所示。

 

图4-2 互联网+药店管理系统组织架构图

4.2.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 数据库设计

4.3.1 数据库命名规则

本系统数据库命名按照一定的标准规范,命名规则如:

  • 采用26个英文字母(区分大小写)和0-9这十个自然数,加上下划线'_'组成,共63个字符,不能出现其他字符(注释除外);
  • 表命名规则:表名只能包含小写英文字母及下划线,一律使用前缀命名法,单词采用名词单数形式,单词之间用下划线分割,如管理模块前缀admin_,用户表admin_user;
  • 字段名命名规则:字段名只能包含小写英文字母及下划线,一律使用前缀命名法,单词采用名词单数形式,单词之间用下划线分割,如用户表前缀u_,用户姓名u_name;
  • 字段名和数据类型一致性原则,即同一个属性在各表中的名称和数据类型要保持一致;
  • 表、字段都必须有完备的注释;
  • 常用表第一个字段id设为主键且自动增长;
  • 布尔字段命名规则为*_is_,如,用户表用户是否锁定字段u_is_lock,布尔字段都必须设置默认值,且默认值设为0;
  • 字符类型设置为varchar,必须设置长度,长度按需一般设置为2的n次方;
  • 时间类型一般设置为date或datetime类型,并设置默认时间为系统当前时间;
  • 统一使用innodb引擎建表。

4.3.2 数据库逻辑结构设计

数据库逻辑结构设计划分为两块,权限设计模块与业务设计模块。

4.3.2.1 权限模块逻辑结构设计

权限主要包括用户、用户信息、角色、资源。其中,用户与用户信息为一对一的关系,用户与角色是多对多的关系,资源与角色是多对多的关系。权限模块的逻辑结构设计模型如图4-6所示。

图4-6 权限模块逻辑结构设计模型

4.3.2.1 业务模块逻辑结构设计

业务模块主要包括药店、药店关键词、药店图片、药品、药品关键词、药品图片、用户、用户评价、用户行为。其中,药店与药店关联词、药店图片、用户评价均为一对多的关系,药店与药品为多对多的关系,药品与药品关键词、药品图片、用户评价均为一对多的关系,用户与用户行为、用户评价均为一对多的关系。业务模块逻辑结构设计模型如图4-7所示。

图4-7 业务模块逻辑结构设计模型

4.3.3 主要数据表设计

表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

 

行为描述

4.4 详细设计

4.4.1 系统程序代码设计

本系统的开发采用经典的分层架构:表示层(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.4.2 系统结构设计及子系统划分

根据系统的业务与功能,将其逻辑结构划分为用户登录子系统、后台管理子系统、药店管理子系统、地理信息子系统、评论管理子系统、药店推荐子系统、客户使用子系统如图4-10所示。

图4-10 系统子系统划分

各个子系统按照功能角度分解,划分出若干不同的功能模块,如4-11各图所示。

图4-11 各子系统功能划分

4.4.3 系统功能模块详细设计

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<Resource> 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<Role> 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<User> 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<Pharmacy> 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<Medicine> 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<Pharmacy> pList);//调用百度地图POI展示方法

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<Evaluate> eList);//将评论批量打到ES上

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<String> kwList, Point currentPoint);//通过用户输入的关键词集合,结合当前位置,调用推荐算法获取推荐的药店排序列表

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);//添加药店、药品的评论

 

 

5  主要功能展示

系统分为客户前端和管理后台,客户前端主主要为用户提供服务,以移动端页面为主,管理后台主要为管理员(包括系统管理员与药店管理员)提供系统管理服务和药店药品管理服务等。

5.1 用户登录展示

用户登录分管理员登录和普通用户登录,管理员登录组要通过PC端登录,普通用于主要从移动端登录,其登录界面分别如图5-1和图5-1所示。

图5-1 PC端管理员登录界面

图5-2 移动端普通用户登录界面

 

用户登录系统后,根据不同的角色,展现出对应的功能界面,提供相应的服务。

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.3 系统管理员功能展示

系统管理员拥有系统后台管理的最高权限,负责系统业务方面的主要运维工作,包括系统管理和药店药品管理两个方面,其中系统管理包括资源管理、角色及角色权限管理、用户管理、系统日志查看,药店药品管理包括药店管理和药品管理。

系统管理员成功登录系统后,将跳转至如图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.4 药店管理员功能展示

药点管理员主要工作是管理本单位的药店和药品。

药店管理方面,药店管理员可对本单位的药店进行增删改查操作,也可对未入驻本系统的药店提出入驻申请,如图5-22所示。

图5-22 药店管理员药店管理

药品管理方面,主要是上下架本店的药品,可上下架的药品清单来至于系统管理员的药品管理,管理界面如图5-23所示。

图5-23 药店管理员药品上下架管理

药店管理员可通过查找需上下架的药品,进行相应的上下架操作。其中,药品上架需要指定该药品在本药店的单价和所在货位号,如图5-24所示。

图5-24 药品上架

6  结论与展望

6.1 结论

本文首先分析了当前社会环境下药店现状及遇到的问题,特别是互联网的到来对药店的冲击与影响;提出了为满足消费者个性化的购买药品需求,将GIS技术、评论挖掘与分析算法、推荐算法整合到药店管理系统中,形成互联网+药店推荐系统;研究了管理信息系统、Web GIS技术、网络文本评论挖掘与分析算法、推荐算法的研究现状;设计并实现了互联网+药店推荐系统。

本系统的实现主要用Java语言开发,采用了当前流行的开源框架和技术,并融合Web GIS技术、情感分析算法(bsa_agorithm)和本文提供的推荐算法;数据存储采用MySQL和Elasticsearch,Elasticsearch用于存储用户行为和用户评价等数据量较大的数据,便于查询、检索和分析,其他系统数据存储在MySQL数据库。该系统包括用户登录子系统、后台管理子系统、药店管理子系统、地理信息子系统、评论管理子系统、药店推荐子系统和客户使用子系统。

本系统以目前先进的互联网技术为支撑,设计与实现了一套完整了互联网+药店推荐系统流程。系统的主要优点如下:

  • 系统实现了一套完整的药店推荐流程,包括浏览附近的药店、关键词查找推荐药店、查看推荐药店的药品信息和历史用户评论、导航至推荐药店、对推荐方案中的药店药品进行评价等功能。
  • 系统先进、用户体验较好。本系统采用了目前先进和流行的技术进行开发,并融合了人工智能算法,注重用户体验,客户可直接在移动设备上使用,操作方便简单。
  • 系统运维成本低。系统功能运维系统管理员可以十分便利的通过后台管理子系统进行管理;技术运维方面,应用服务器和数据库服务器都部署在阿里云,阿里云强大的技术团队可为我们有力的技术支持,确保系统的稳定运行。

6.2 展望

随着互联网技术的更深入发展以及互联网+时代的到来,更多的互联网先进技术,如物联网、人工智能、大数据、云计算、区块链等,将会应用于生活的方方面面,为人们的生活带来方便。同样,我们的互联网+药店系统还有许多值得完善的地方,主要总结一下为3个方面:

  • 情感分析算法、推荐算法有待进一步的优化。通过分析更多的内在和外在因素,优化算法模型,为用户推荐更加合适的药品购选方案。
  • 为提升用户对系统推荐的药店和药品的信任度和满意度。引入区块链等技术,实现对入驻的药店以及药品品牌信誉度评级,确保系统推荐的内容真实可靠,避免“莆田系”药店出现。
  • 完善系统监控管理功能。系统监控接口与微信、短信等接口对接,实时将系统出现的问题以微信、短信的形式通知管理员。

 


参考文献

  1. 乐伟平.公司人事管理信息系统的开发[J].财经问题研究,2016(S1):6-10.
  2. 彭红利. 通用物资仓库管理信息系统设计与实现[D].西安建筑科技大学,2015.
  3. 杜宇. 服装生产管理信息系统设计与实现[D].吉林大学,2016.
  4. 沈捷. 快消品企业仓储管理系统的设计与实施[D].江西财经大学,2018.
  5. 谢鹏. 建筑企业管理信息系统设计与实现[D].天津大学,2016.
  6. 舒昌俊. 建设工程造价信息管理系统集成研究[D].武汉理工大学,2013.
  7. 李健.铁路审计管理信息系统分析与设计[J].铁路计算机应用,2015,24(12):28-31.
  8. 张宇栋,吕淑然,李玉杰.生产事故隐患排查治理及预警管理信息系统研究[J].安全与环境工程,2017,24(02):148-152+158.
  9. 骆鹏傲,朱红,刘奕君,刘菁.研究生招生与培养管理信息系统的设计[J].湖南工程学院学报(自然科学版),2013,23(04):38-40.
  10. 宋甜. 学生信息管理系统设计与实现[D].湖北工业大学,2017.
  11. 王栎浩. 高校培训管理信息系统的设计与开发[D].华北电力大学(北京),2017.
  12. 滕婕.社区图书馆管理信息系统[J].中国集体经济,2018(12):97-101.
  13. 管伟元,金海丰.科研设计管理信息系统数据库性能优化研究[J].船舶与海洋工程,2013(04):69-72.
  14. 杨扬,贾君君,李研.科研项目管理信息系统开发及应用研究[J].信息系统工程,2017(12):112-113.
  15. 张蕾. 某证券公司客户关系管理信息系统的设计与实现[D].江西财经大学,2016.
  16. 杨彦璐. 民生银行信贷管理信息系统设计与实现[D].电子科技大学,2015.
  17. 苏樱.浅谈资金管理信息系统平台的设计与实践[J].中国商贸,2014(36):72-74.
  18. 刘耘礽. 我国社保基金一体化管理信息系统研究与架构设计[D].西南财经大学,2014.
  19. 刘毅新.社会保险管理信息系统的设计与开发[J].电子技术与软件工程,2018(01):47.
  20. 周江龙.电力营销管理信息系统的设计与应用[J].中国战略新兴产业,2018(20):137+139.
  21. 米子秋.物流运输管理信息系统研究[J].中国新通信,2018,20(07):80.
  22. 李维雅.医院管理信息系统(HMIS)的日常维护与管理[J].中外女性健康研究,2017(24):181-182.
  23. 张曼玲,付冰.旅游管理信息系统设计与实现[J].品牌(下半月),2015(11):229-230.
  24. 孙小丽.茶业企业财务管理信息系统设计与实现[J].福建茶叶,2018,40(01):448-449.
  25. 林高印.浙江省农田水利项目管理信息系统开发与研究[J].农村经济与科技,2014,25(12):70-71.
  26. 吴健. 种猪数字化管理信息系统开发与应用研究[D].华中师范大学,2017.
  27. 郑磊. 临沂市智慧城市管理信息系统构建研究[D].山东大学,2015.
  28. 张岚.智能物联网平台的船舶交通管理信息系统框架设计[J].舰船科学技术,2018,40(02):58-60.
  29. 丁汀.浅谈连锁药店管理信息系统的设计与实现[J].科技经济导刊,2017(04):52.
  30. 李亚丽.药店管理信息系统的设计与实现[J].信息技术,2015(07):125-127.
  31. 杨登.药品管理信息系统的分析与设计[J].北方经贸,2014(05):212-213.
  32. 毕含峰. 医院药品管理信息系统的设计与实现[D].电子科技大学,2012.
  33. 程彬,段浩宇,董炜华.基于百度地图API的购房平台系统开发[J].长春师范大学学报,2014,33(08):86-90.
  34. 张欣欣.HTML及百度地图API在WebGIS中的应用实例研究[J].江苏科技信息,2017(07):63-65.
  35. 郑诗嘉,李建,代斌.百度地图API在O2O餐饮系统中的应用[J].电脑知识与技术,2017,13(11):89-90.
  36. 孙迪,李沛鸿.百度地图API在WebGIS中的应用[J].河南科技,2013(22):165-166.
  37. 姜珊,张海旭,于璐,杨黎黎,王新秀.百度地图API在水库信息显示中的应用[J].信息技术与信息化,2016(09):33-35.
  38. 鲁萱萱.基于高德地图的骑行发现与分享功能的设计[J].电脑知识与技术,2018,14(04):258-259+264.
  39. 马超,李苗.基于高德地图的生活服务平台的设计与实现[J].科教文汇(下旬刊),2017(11):182-184.
  40. 李庭威,王峰,汪进,夏佩,邱文添,龙保任,李学易.高精度差分在高德地图上的多点实时定位[J].电脑知识与技术,2017,13(23):200-201.
  41. 吴国华.基于高德地图开发公交查询系统项目在JavaScript课程教学中的应用[J].电脑知识与技术,2018,14(05):162-163+170.
  42. 吴肖,彭璇,朱明磊.基于Google Map API的校园电子地图开发[J].测绘工程,2010,19(03):35-38.
  43. 李垠,特木其勒,刘可,张亦梅.Google地图在地震信息发布中的应用[J].地震地磁观测与研究,2011,32(05):166-171.
  44. 霍胜春,阚金明.基于Google地图接口的流动机械远程监控系统设计[J].物流工程与管理,2012,34(05):89-90+82.
  45. 许祥军,魏红芹.面向产品开发的评论挖掘方法研究[J].现代计算机(专业版),2018(01):30-34.
  46. 程惠华,黄发良,潘传迪.基于产品评论情感分析的用户满意度挖掘[J].福建师范大学学报(自然科学版),2017,33(01):14-21.
  47. 李涵昱,钱力,周鹏飞.面向商品评论文本的情感分析与挖掘[J].情报科学,2017,35(01):51-55+61.
  48. 黄秋义,丁婷婷,杨帆.基于商品评论信息的情感倾向性分析模型[J].电子制作,2016(08):36-37.
  49. 刘紫玉,尹丽娟,王青,王玉恒,杨明欣.基于消费者评论挖掘的B2C网购物流服务因素类型及其作用机制研究[J].河北科技大学学报,2017,38(06):600-608.
  50. 郑玉桂. 面向电商评论细粒度观点挖掘的拓展主题模型研究[D].浙江工商大学,2017.
  51. 郗亚辉.产品评论挖掘中特征同义词的识别[J].中文信息学报,2016,30(04):150-158.
  52. 陈义. 文本挖掘在网购用户评论中的应用研究[D].浙江工商大学,2018.
  53. 傅黎犁,刘岩.“毒胶囊”事件舆情分析及其对医学情报工作创新的启示[J].医学信息学杂志,2013,34(01):51-54.
  54. 张瑜,李兵,刘晨玥.面向主题的微博热门话题舆情监测研究——以“北京单双号限行常态化”舆情分析为例[J].中文信息学报,2015,29(05):143-151+159.
  55. 宋铁,叶永隆,刘国恒,郭汝宁,李灵辉.突发公共卫生事件网络舆情监测平台的建立与应用[J].华南预防医学,2013,39(03):53-55+58.
  56. 李斅葳. 基于敏感信息挖掘的网络舆情监测系统研究[D].复旦大学,2013.
  57. 姜胜洪.网络谣言的形成、传导与舆情引导机制[J].重庆社会科学,2012(06):12-20.
  58. 陈元,赵静.基于WEB用户产品评论的企业竞争情报挖掘实证研究[J].情报科学,2016,34(04):80-85.
  59. 石进,胡广伟.企业竞争情报系统建设中的舆情监控研究[J].图书情报工作,2012,56(24):44-48.
  60. 叶水茂.网络环境下的企业危机管理与舆情应对[J].新闻世界,2011(12):13-15.
  61. 刘世杰,程齐凯.网络新闻个性化推荐系统策略研究[J].软件导刊,2017,16(08):146-148+152.
  62. 黄志强. 基于标签的个性化推荐系统研究[D].西安电子科技大学,2017.
  63. 张东伟. 面向用户偏好的包推荐算法研究[D].南京邮电大学,2017.
  64. 贺桂和.基于用户偏好挖掘的电子商务协同过滤推荐算法研究[J].情报科学,2013,31(12):38-42.
  65. 韩亚楠,曹菡,刘亮亮.基于评分矩阵填充与用户兴趣的协同过滤推荐算法[J].计算机工程,2016,42(01):36-40.
  66. 杨大鑫,王荣波,黄孝喜,谌志群.基于最小方差的K-means用户聚类推荐算法[J].计算机技术与发展,2018,28(01):104-107.
  67. 卜旭松. 基于物品协同过滤的个性化视频推荐算法改进研究[D].宁夏大学,2015.
  68. 吴玺煜,陈启买,刘海,贺超波.基于知识图谱表示学习的协同过滤推荐算法[J].计算机工程,2018,44(02):226-232+263.
  69. 李琳娜,李建春,张志平.启发式的物品相似度传播的协同过滤算法研究[J].现代图书情报技术,2013(01):30-35.
  70. 曾维明. 基于领域本体的语义检索及个性化推荐算法研究[D].南京理工大学,2010.
  71. 何明,刘伟世,张江.支持推荐非空率的关联规则推荐算法[J].通信学报,2017,38(10):18-25.
  72. 金紫嫣,张娟,李向军,温海平,张华薇.一种带标签的协同过滤广告推荐算法[J].计算机工程,2018,44(04):236-242+247.
  73. 陈平华,陈传瑜,洪英汉.一种结合关联规则的协同过滤推荐算法[J].小型微型计算机系统,2016,37(02):287-292.
  74. https://bitbucket.org/shichaoqu/semantic-analysis-tool/overview.

 

 

 

  • 23
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
基于Java的药房管理系统是一个用于管理药房业务的软件系统。它可以帮助药房管理药品库存、销售、采购、药品信息等各项业务。下面是一个基本的设计实现的介绍: 1. 系统需求分析:首先需要明确系统的功能需求,包括药品库存管理、销售管理、采购管理、药品信息管理等。 2. 数据库设计:根据系统需求,设计数据库模型,包括药品表、库存表、销售表、采购表等。使用Java的数据库操作技术(如JDBC)与数据库进行交互。 3. 用户界面设计设计用户友好的界面,包括登录界面、主界面、药品管理界面、销售管理界面、采购管理界面等。可以使用Java的GUI库(如Swing或JavaFX)进行界面设计。 4. 功能实现:根据系统需求,实现各项功能模块。例如,药品管理模块可以实现药品的添加、删除、修改和查询;销售管理模块可以实现销售单的生成和查询;采购管理模块可以实现采购单的生成和查询等。 5. 数据处理与业务逻辑:根据用户的操作,对数据库中的数据进行增删改查,并进行相应的业务逻辑处理。例如,销售药品时需要更新库存数量,采购药品时需要更新库存数量和采购记录等。 6. 安全性与权限控制:对系统进行安全性设计,包括用户登录验证、权限控制等。可以使用Java的安全框架(如Spring Security)进行权限管理。 7. 错误处理与异常处理:对系统可能出现的错误和异常进行处理,保证系统的稳定性和可靠性。 8. 测试与调试:对系统进行测试和调试,确保系统的功能正常运行。 9. 部署与维护:将系统部署到服务器上,并进行系统的维护和更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逍遥俊子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值