连锁医药经销模式研究

时间:2022-09-20 01:15:59

连锁医药经销模式研究

0引言

医药经销企业为了提高其市场占有率,先后购并了十几家医药商业网点,形成了遍布全省及一些周边地区的庞大的销售网络,新的经营模式必然会带来许多新的管理难题,特别是如何能够跨越时空,从总部角度真正做到对异地的药品连锁店进行细致、及时而有效的管理,这已经成为目前跻身大市场的企业管理瓶颈。为了提高企业的工作效率和原有系统的利用率,加强企业的管理和竞争优势,就必须对这些原有的系统进行有效的改进和整合,建立一套完善的、能够准确反映出现有经销模式和经销过程的系统,来克服原有系统存在的种种弊端…。本文针对医药经销过程的信息共享和平台异构等问题,开发了基于J2EE平台和MVC设计模式的连锁医药经销系统。本系统不仅实现了灵活的销售管理和内部调拨管理机制,而且是一个可扩展、可移植、易维护的高性能的应用系统江”。

l系统的需求分析

药品经营管理系统由医药总公司系统和分店零售管理子系统构成。总公司负责药品的采购、调拨、库存、财务、销售查询等的管理。分店零售子系统主要是对销售、库存账目以及从总公司接收调拨单等各种资源信息的管理。

(1)总公司系统用例分析:采用UML中用例模型来描述角色所理解的功能。系统包括7个角色:开票员、收款员、业务员和保管员、财务记账员、系统管理员、经理等。各种角色对系统的用例描述为:①开票员:负责开销售单和查询药品信息等;②收款员:进行调拨单点单收款,打印与库房对账清单,打印日结账清单,“班次结账”是为确定并清除该班次的收款信息;③业务员:负责开进货单,并可查询进货单:④保管员:负责对进货单、销售单点单入库,清点库存进行保管账查询和定期打印盘点表;⑤财务记账员:销售单、入库单点单入商品账,查询商品账,往来账记账和查询管理:⑥系统管理员:对药品信息管理、客户信息管理、人员管理及权限管理等;⑦经理:可以查询销售业绩,根据销售制定进货计划,对将来的发展制定规划。

(2)零售子系统的用例分析:该系统的角色有收款员、系统管理员、业务员、营业员和普通用户。为了更安全、更快的实现数据收集和更新,本系统采用Web浏览器作为客户端,Web浏览器的操作主要是经授权的收款员,把最新的销售信息上传到数据库,从而及时反映销售变化。各种角色对系统的用例描述为:①收款员:开销售单、查询销售记录,在各班次交班前需要将收款的金额点清,并和计算机统计的金额一致,“班次结账”是为确定并清除该班次的收款信息,最后,在每天下班前,按柜组统计零售日销售信息,如果与柜组账目不符,要打印该柜组日销售清单;②系统管理员:可以进行销售记录查询,对药品信息管理,对人员及权限管理等:③业务员:负责开要货申请和将调拨单点单入库;④营业员:保管账查询和定期打印盘点表;⑤普通用户:查询药品信息。药品是由公司统一进货,药店只需从公司调拨,而且销售情况也由公司统一管理,这样,药店只有简单的财务管理。

2系统的总体设计

2.1系统的体系结构设计本系统采用MVC(模型一视图.控制)设计模式,将输入、处理、输出流程按照模型、视图、控制的方式进行分离,这样系统被分为模型层、视图层、控制层3个层。模型层进行业务流程/状态的处理以及业务规则的制定,视图层代表用户交互界面,控制层则从用户接收请求,将模型与视图匹配在一起,由控制层确保用户界面于模型问的对应联系,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据,增加了代码的重用性61。本系统体系结构图如图l所示。在系统体系结构的设计中,我们将J2EE架构和MVC设计模式结合在一起,采用一个免费的开源Web层的应用框架Structs实现,MVC设计模式具体对应到J2EE架构如下:JSP对应视图层,处理表现,因为整个应用系统主要通过JSP来与外界进行交互;Servlet对应控制层,处理客户请求,并作为JSP与EJB之间的中间枢纽,调用运行在EJB服务器中的EJB构件,EJB对应模型层,主要进行业务及数据的处理“1。本系统构建的连锁医药经销系统采用的是JBuilder8.0开发工具,应用服务器采用WeblogicServer8.0,数据库是Ora-cle9i,具有稳定性、扩展性好,易维护的特点。

2.2数据对象及业务逻辑设计(1)此系统中涉及的总公司与各药店零售子系统的有关数据设计的内容相似,下面就以零售子系统为例进行说明数据库设计的主要内容,如表1所示。(2)该连锁管理系统主要由两个子系统组成:总公司管理子系统和分店零售子系统,总公司管理子系统需要实现的业务逻辑有:开进货单、调拨单、调拨单点单入账、库存账查询、商品账查询、经理查询系统、药品信息管理、供应商信息管理和人员权限设置等;分店零售子系统需要是实现的业务逻辑有:开销售单、调拨单点单入库、库存查询和人员权限设置等。为了实现灵活的内部调拨管理机制,系统在总部与分部之间采用药品库存报警和自动补货等功能。

2.3要货申请流程设计本系统的一个重要工作流程是要货申请流程。当零售药店的时间触发器(触发时间由管理员设定)检查到药品的库存低于库存临界值时,就会触发要货,生成要货申请表(可以选择管理员或自动生成)发送到总公司,总公司对申请表处理后发出响应,开出调拨单及发送药品,如果总公司缺货,总公司可以向供应商发送采购请求消息,并等待供应商响应消息后,开出调拨单。

2.4性能优化设计对被频繁访问的业务数据进行缓存,减少数据库交互次数,以改善系统性能”“”。在连锁药品经销系统中,比如:药品信息、供应商信息、用户权限信息等。如果每次访问这些数据时,都通过EJB或JDBC去取,那将会引起远程调用,访问数据库等既耗时又耗资源的操作,给系统造成较大的负担,对这些被用户频繁访问的业务数据,建立中间层数据缓存非常有用,可以减少与数据库的交互次数,从而改善系统的性能。因此,如何对这些业务数据进行有效缓存,成了改善系统性能的又一关键所在。我们在系统开发中,引入一个叫CacheProxy的中间件对事务进行统一管理,CacheProxy的原理类似于操作系统中的高速缓存的实现原理,每种需要缓存的数据都有自己的缓存池,可以根据实际需要设定缓存池的最大记录数,采用LRU(最近最少使用)的淘汰策略进行管理,当缓存的数据所对应的数据库中的记录被更新时,共享缓存会在数据库一级探测出冲突的存在,比如借助于数据库触发器,由触发器通知Ca-ehProxy并刷新缓存中的相应数据。在本系统中,大部分数据是需要共享的,而且需要被多次浏览,因此使用缓存是有益的,系统性能也将能够提升,但缓存并非总能够改善系统性能,如果数据是排他性的(不能共享),比如个人账号信息,则缓存毫无意义,另外,比如在两次更新缓存期间很少访问到缓存中的内容,此时,如果使用缓存,则它所带来的优势可能很小,甚至对性能造成不好的影响。

3实现的关键技术

3.1生成要货申请以某零售药店向公司的要货请求为例,要货请求单的生成可以根据时间触发器触发库存查看的结果,由自动生成采购页面(autecreatePP.jsp)调用相应对象实体的方法自动生成,也可以由管理员根据要采购的货物信息,在生成采购页面(createPP.jsp)中填写采购量,然后创建要货申请单。当要货申请单生成后,生成调用系统包中的toXML方法将其转换成XML文件形式,再调用sendMessage方法将其发送给总公司。

3.2实现消息传输本系统采用Java信息服务(Javamessageservice,JMS)技术,信息服务的优点是不同客户与服务器之间可以进行方便地通信,信息的发送方或者接收方并不需要知道对方的信息。JMS技术有两种信息发送机制,分别是队列与主题信息发送机制,其中,队列机制可以使信息滞后接收,而且只能将同一信息发送给一个用户“1,根据需求,我们可以采用队列机制来实现零售系统的要货申请单和总公司对其响应的调拨单的消息传输,这样既解决了总公司和对应的零售药店必须同时在线传送的问题,也能使得每个药店只能收到属于自己的调拨单信息。

3.2.1消息格式总公司管理系统和各零售子系统之间的消息格式采用基于cXMLl.1标准的XML文档。系统包括OrderRequest.xml(零售系统对公司的采购请求消息)和OrderResponse.xml(公司对零售系统采购请求的响应消息)两种消息。

3.2.2消息传输的JMS实现为每个零售点在WebLogicServer创建~个队列信息域。

(1)消息发送实现消息发送是零售药店将生成的要货请求单OrderRe—quest.xml文档发送给总公司,由系统工具包msgSend.class类实现,msgSend.java中关键是sendMessage方法,其主要代码为:Contextcontext=getlnitialContext(url.tostrin90);/+url是消息接收方的端口地址对象•/Queuequeue=fQueue)context.100kup(stringQueue);/+string—Queue是消息队列名+/QueueConntextFactoryqueuefactory=(QueueConntextFactory)context.100kup(JMSFACToRY)/.用于创建信息域的联接+/QueueConectionqcon=queuefactory.createQueueOonteetionO;QueueSessionqsession=qcon.createQueueSession(false,Ses-sion.AUTOACKNOWLEDGE);/+创建一个消息对话+/QueueSenderqsender=qsession.createSender(queue);/’创建信息发送对象•/TextMessagemsg=qsession.createTextMessage0;qcon.startO;msg.setText(stringXML);/*添加XML文档到消息中’/qsender.send(msg);/’发送消息+/

(2)消息接收实现由系统工具包的msgReceive.class类实现,与域消息发送的实现类似,msgReceive.java中receiveMessage方法的主要代码如下:QueueReceiverqreceiver=qsession.createReceiVer(queue);msg=(TextMessage)qreceiver.receive0;/+接收TextMessage’/StringstringXML=msg.getText0;/宰提取msg中的XML文档+/

(3)XML解析实现包括零售系统的要货申请单的XML文档和总公司对其响应的调拨单的XML文档的解析。由系统工具包中的parser-OrderRequest.class和parserOrderResponse.class实现。以paser-OrderRequest.java为例,其中的主要方法如下:publicvoidstartDocumentO;严对XML文档开始事件的处理+/publicvoidendDocumentO;/.实现XML文档结束事件的处理+/publicvoidstartElement0;/.对标记开始事件的处理+/publicvoidendElement();严实现对标记结束事件的处理+/publicvoidcharacters();/.实现对标记文本解析+/publicstaticOrderRequestgetOrderRequest0;/+解析并得到OrderRequest对象01",or为解析后的调拨单对象+/

4结束语

基于J2EE平台和MVC设计模式开发的医药经销系统,由于采用J2EE平台带来的跨平台性、互操作性,企业可以实现遗留应用的功能和数据的复用。本文提出了一个基于J2EE平台的重构开发信息集成的优化设计解决方案,并给出具体的实现方法,使得系统在遗留系统的重用性,新系统的伸缩性等方面都有很大提高。该系统经正式使用后,收到了良好的效果,极大地提高了医药经销系统的管理和工作效率。

上一篇:医药流通物流体系的思考 下一篇:国外医药中介组织操作体系