资源描述
目录1.概述31.1.背景31.2.参考资料32.模块描述32.1.在系统中的位置32.2.功能32.3.性能43.标准化设计43.1.引用模块说明43.2.本模块可能输出的共享模块说明54.模块设计64.1.模块设计准则64.2.实现原理64.3.模块设计的备选方案64.4.功能划分64.5.功能实现84.5.1.应用管理构件84.5.2.消息中心构件124.5.3.应用构件244.5.4.调度构件245.数据描述265.1.数据库模型265.2.数据字典276.类设计277.接口设计287.1.用户接口287.2.硬件接口287.3.软件接口287.3.1.规范接口287.3.2.非规范接口288.可靠性设计289.可测试性设计2810.安全性设计2811.关键技术说明2812.开发和运行环境2812.1.硬件环境2812.2.软件环境281. 概述1.1. 背景工具化系统中需要为用户提供灵活的消息提示机制,用户可通过各种通讯方式获取系统发送的提示信息。用户能根据自己所关心的业务有针对性的获取系统中提示的消息,可根据自己的作息时间获取相关消息。1.2. 参考资料C4消息中心设计方案(12-01).docx2. 模块描述2.1. 在系统中的位置消息中心在系统中处于较低的层面,需要为上层的业务模块提供消息发送的统一途径。2.2. 功能l 提供标准消息发送服务接口,应用构件调用此接口透明发送消息;l 提供标准消息注册服务接口,应用管理构件调用此接口透明注册消息;l 提供消息订阅功能,用户可有选择的通过手机短信、站内信和电子邮件三种方式接收消息;用户可设定订阅消息的接收时段;l 支持消息定时发送;l 支持消息订阅方式扩展,后期可不断扩展消息的接收方式;l 与其它构件耦合度最低,确保本构件的独立性。2.3. 性能l 能及时的将系统中应用模块的消息发送到用户3. 标准化设计3.1. 引用模块说明引用模块说明模块名称模块说明引用方式用户管理提供用户帐号及用户相关信息管理功能可直接调用相关API获取用户信息邮件发送为用户提供系统中收发邮件的功能通过插件,查询消息中心的消息队列并调用邮件模块API发送邮件手机短信提供收发送短信的功能通过插件,查询消息中心的消息队列并调用手机短信模块API发送短信系统消息向用户发送各种系统提示信息使用该模块前台部分,提供转换接口将该功能原始数据来源变为消息中心消息表.系统消息是主要方式3.2. 本模块可能输出的共享模块说明模块名称模块内容消息发送向系统提供统一的消息发送方式调度管理为系统提供统一的轮询调度机制4. 模块设计4.1. 模块设计准则4.2. 实现原理4.3. 模块设计的备选方案4.4. 功能划分各构建之间的依赖关系如下:4.5. 功能实现4.5.1. 应用管理构件应用管理构件为整个系统提供应用注册、配置文件解析的功能,并提供一个可在安装时候进行消息类型交互设置的界面。该构建属于系统管理类型控件。4.5.1.1. 注册应用API该功能将其它地方传来的应用相关参数保存到数据库并返回保存结果,该功能直接对外开发,开发人员可调用。方法原型: /* * 将应用信息注册到系统中 * * 返回success则成功,返回其他值为失败原因 * param string $code * param string $name * param string $desc * return string */ public function regApp($code, $name, $desc) / TODO: implement4.5.1.2. 应用注册PAGE为用户提供应用注册的界面,可录入应用信息。应用列表注册应用4.5.1.3. 解析配置API将安装部署包中的消息注册配置文件进行解析,获取其中需要注册的应用信息及消息类型,并调用相关API将其注册到系统中。方法原型: /* * 解析配置文件内容,并注册配置信息 * param int $xml * return boolean */ public abstract function praseConfig($xml) / TODO: implement输入:配置文件的内容,格式可参考输出:解析以及注册是否成功流程:将传递进来的xml配置内容进行解析,获取其中的应用及消息类型信息,然后调用应用/消息注册API将其注册到数据库中。配置文件结构如如下:4.5.1.4. 获取已注册应用API该功能对外提供一个函数,可获取系统中所有已注册应用对象的列表。方法原型:/* * 获取已注册应用 * return array */ public abstract function getRegApp() / TODO: implement4.5.2. 消息中心构件消息中心是消息系统的核心构件,提供与消息有关的核心服务,包括消息注册、消息订阅消息管理和消息处理。4.5.2.1. 应用/消息注册该部分只提供数据访问的消息接口,不负责业务上的功能。应用注册:4.5.2.1.1. 注册消息API消息注册API与应用注册类似,将其它地方传来的参数保存到数据库并返回保存结果。每个消息类型都属于一个应用中,因此在这里需要保证消息与应用的主外键关系正确。方法原型:/* * 针对消息类型注册信息表 * 1.注册时候需要填写应用ID、消息编号、消息名称、备注 * 2.注册完成后用户动态选择消息可订阅方式 * * 返回值为该消息类型的编码,返回success则成功,返回其它则为失败原因 * param string $type_code * param string $code_app * param string $name * param string $desc * param string $msgType * return string */ public abstract function regMsgType($type_code, $code_app, $name, $desc, $msgType) / TODO: implement4.5.2.1.2. 获取已注册消息API该功能配合已注册应用API来使用,同样提供一个函数,可获取某个应用下已注册的消息类型对象列表。方法原型:/* * 获取已注册消息 * param string $app_code * return array */ public abstract function getRegMsgType($app_code) / TODO: implement4.5.2.1.3. 消息类型注册PAGE消息类型列表注册消息4.5.2.1.4. 获取消息发送许可API获取某条消息是否可发送,通过对消息注册表进行检查,获取消息的消息类型及发送方式是否在系统中注册,并返回检查结果。方法原型: /* * param string $appid * param string $typeid * return boolean */ public abstract function getPermit($appid, $typeid) / TODO: implement输入:应用识别号、消息类型识别号输出:true通过验证、false未通过验证流程:查询消息注册信息,获取指定应用的消息类型是否注册,并返回判断结果4.5.2.2. 消息订阅4.5.2.2.1. 消息订阅API消息订阅API对外提供一个函数,可将消息订阅界面传来的数据保存到数据库。方法原型:/* * 添加一条消息订阅 * param string $msgplugin * param string $msgtype * param string $user * param int $timesolt * param string $condition * return boolean */ public abstract function subscibe($msgplugin, $msgtype, $user, $timesolt, $condition) / TODO: implement 4.5.2.2.2. 消息订阅PAGE消息订阅界面从应用管理模块加载已注册应用及消息的列表,在前台展现成用户可选择的界面;再获取用户已订阅的应用及消息,将界面相关选项标识成已选。界面支持用户选择应用及应用关联的消息类型。邮件可配置消息发送筛选条件,通过标题进行匹配。短信可配置消息发送筛选条件、接收时间段,通过标题进行匹配消息订阅界面原型4.5.2.3. 消息管理4.5.2.3.1. 消息提交API消息提交API对外提供一个函数,该函数将应用发来的消息以系统消息发送给用户,并检查用户是否有其它订阅方式,再以其它订阅方式发送给相关消息队列。方法原型:/* * 返回成功或失败原因代码 * param string $应用识别号 * param string $消息识别号 * param string $目标用户ID * param string $消息标题 * param string $消息内容 * param string $链接地址 * param string $有效期 * return string */ public abstract function sendMsg($应用识别号, $消息识别号, $目标用户ID, $消息标题, $消息内容, $链接地址, $有效期) / TODO: implement消息提交流程以下是消息中心处理流程4.5.2.3.2. 系统消息查看4.5.2.3.2.1. 消息数量获取API该API从系统消息表中获取当前登录用户的未读消息数量,并以JSON格式将消息数量输出,供前台AJAX进行渲染。方法原型:/* * 获取未读消息数量 * param int $用户编号 * return int */ public abstract function getMsgTotal($用户编号) / TODO: implement4.5.2.3.2.2. 消息查看PAGE该页面根据传来的系统消息ID展示系统中某条消息的详细内容,在第一次显示消息内容时候,需要将该条消息的状态设置为已读。4.5.2.3.2.3. 消息列表PAGE该页面需要显示当前用户在系统中的所有已读和未读消息,并可接收一个参数只显示已读内容。4.5.2.4. 扩展消息处理插件扩展消息处理插件在系统中承担某种类型消息的具体发送者,通过定期循环检查自己在系统中所注册过的消息队列,将符合条件的消息发送给用户,并标记消息状态。扩展插件被调度程序定期调用,从而实现自动化的消息发送功能。下图为消息处理插件流程:4.5.2.4.1. 插件信息管理该功能用来管理系统消息发送插件,实现插件信息的注册、删除、查看功能。在插件注册时候需要向调度程序注册插件的定时执行信息。4.5.2.4.1.1. 插件信息列表展示系统中所有已注册插件信息,通过调用本模块下API来获取数据。插件列表4.5.2.4.1.2. 插件信息注册功能插件信息注册界面完成插件信息的录入工作,将插件基本信息保存到插件表中,同时将插件信息添加到调度表中,实现插件的定时调用。插件注册4.5.2.4.1.3. 插件信息删除可通过插件信息列表删除插件信息,在删除插件信息的同时还需要删除调度表中的相关内容。输入:插件ID输出:是否删除成功流程:1.删除插件在操作系统中关联的调度任务2.删除插件在应用系统中的注册信息3.删除插件信息4.5.2.4.1.4. 解析插件配置API将安装部署包中的插件注册配置文件进行解析,获取其中需要注册的应用信息及消息类型,并调用相关API将其注册到系统中。插件配置文件结构如下:4.5.2.4.1.5. 获取已注册插件API对外提供一个函数,可获取系统中已注册插件信息的列表。方法原型: /* * 获取已注册插件信息列表 * return array */ public abstract function getRegPlugin() / TODO: implement输入:无输出:插件信息列表流程:查询插件信息及调度信息,组织插件信息表4.5.2.4.2. 邮件发送插件该插件完成邮件消息的发送功能,首先从邮件队列表中获取符合发送要求的消息,然后调用系统用户模块的API获取用户接收邮箱,最后调用邮件发送API将消息发送给获取的邮箱并标识消息状态。4.5.2.4.3. 短信发送插件该插件完成手机短信发送功能,从短信网关表中获取需要发送的短信内容,并检查该短信的接收时段,如果正处于消息接收时段,那么获取用户手机号码,调用短信网关接口将消息发送给短信网关,并标识消息发送状态。4.5.3. 应用构件4.5.3.1. 定时消息插件定时消息插件是系统中业务模块需要开发的插件,该插件被定期调用,获取系统模块中需要发送的消息,然后调用消息中心的消息提交API将消息推送给消息中心。消息发送时候需要标识消息来源应用及消息类型。定时消息流程4.5.4. 调度构件4.5.4.1. 调度列表以列表形式展示系统中已经注册的所有任务信息。4.5.4.2. 调度注册提供一个表单,可填写调度名称、周期、调度需要执行的程序。首先将调度信息保存到数据库中,然后在操作系统中添加一条调度信息(调度名称保证唯一)。4.5.4.3. 调度删除从调度列表可触发调度删除链接,首先删除操作系统中相关的定时任务,然后删除数据库中调度数据。4.5.4.4. 调度修复查询已经注册的调度信息,然后从操作系统中删除所有与本系统相关的调度信息,最后再按照系统注册的调度信息向操作系统注册定时任务。5. 数据描述5.1. 数据库模型5.2. 数据字典消息中心数据模型.pdm5.2.1. 应用注册信息表名称代码注释数据类型主要的外来键默认值应用IDID发送消息时候根据模块编码进行唯一性确定,由证书ID和应用ID两部分构成,确保ID唯一varchar(32)TRUEFALSE应用名称NAMEvarchar(32)FALSEFALSE备注DESCvarchar(100)FALSEFALSE5.2.2. 时段表名称代码注释数据类型主要的外来键默认值接收时段编号IDintTRUEFALSE名称namevarchar(32)FALSEFALSE时段1t10:00,23:59varchar(100)FALSEFALSE时段2t2varchar(100)FALSEFALSE时段3t3varchar(100)FALSEFALSE5.2.3. 消息类型注册信息表名称代码注释数据类型主要的外来键默认值应用IDAPP_IDvarchar(32)TRUETRUE消息类型IDid该类型在编码中发送消息使用varchar(32)TRUEFALSEgroup/module/msgtype可选订阅方式rcvtyps多个订阅方式,中间用逗号分隔,如type,typevarchar(200)FALSEFALSE消息类型名称name显示在界面上的消息名称varchar(32)FALSEFALSE备注descvarchar(100)FALSEFALSE5.2.4. 消息订阅方式表(插件)名称代码注释数据类型主要的外来键默认值订阅方式IDidvarchar(32)TRUEFALSE订阅方式名称namevarchar(128)FALSEFALSE队列处理SQLsql插件的名称varchar(50)FALSEFALSE备注descvarchar(100)FALSEFALSE5.2.5. 消息订阅记录表名称代码注释数据类型主要的外来键默认值订阅方式IDMP_IDvarchar(32)FALSETRUE消息类型IDmt_id该类型在编码中发送消息使用varchar(32)FALSETRUEgroup/module/msgtype接收用户编号uidvarchar(32)FALSETRUE接收时段编号ts_idintFALSETRUE过滤条件conditionvarchar(50)FALSEFALSE5.2.6. 用户5.2.7. 用户消息表名称代码注释数据类型主要的外来键默认值消息流水号idvarchar(32)TRUEFALSE标题titlevarchar(200)FALSEFALSE消息内容contentHTM格式,按模板生成varchar(500)FALSEFALSE消息状态state0 未读,1-已读intFALSEFALSE接收用户编号uidvarchar(32)FALSETRUE创建时间send_time消息插入的时间datetimeFALSEFALSE接收时间read_time打开阅读时间datetimeFALSEFALSE5.2.8. 调度管理名称代码注释数据类型主要的外来键默认值调度编号idvarchar(32)TRUEFALSE调度名称namevarchar(128)FALSEFALSE调度时间roundvarbinary(256)FALSEFALSE调度执行程序handlervarbinary(256)FALSEFALSE5.2.9. 站内信名称代码注释数据类型主要的外来键默认值消息流水号id系统自动产生intTRUEFALSE接收时段编号ts_idvarchar(32)FALSETRUE标题titlevarchar(256)FALSEFALSE消息内容contentHTM格式,按模板生成textFALSEFALSE消息状态state0 待发, 1-正在发送,2-已发, 3-放弃intFALSEFALSE接收用户uidvarchar(32)FALSEFALSE创建时间create_datetimedatetimeFALSEFALSE预订发送时间send_time定时发送时间datetimeFALSEFALSE发送时间sended_timedatetimeFALSEFALSE失败重发次数resend_times失败重发次数,每次失败减1,等于0时放弃intFALSEFALSE有效期限void_time超过此期限不再发送datetimeFALSEFALSE5.2.10. 邮件消息队列名称代码注释数据类型主要的外来键默认值消息流水号id系统自动产生intTRUEFALSE接收时段编号ts_idvarbinary(32)FALSETRUE标题titlevarchar(256)FALSEFALSE消息内容contentHTM格式,按模板生成textFALSEFALSE消息状态state0 待发, 1-正在发送,2-已发, 3-放弃intFALSEFALSE接收邮箱rcv_mailaddrvarchar(32)FALSEFALSE创建时间create_datetimedatetimeFALSEFALSE预订发送时间send_time定时发送时间datetimeFALSEFALSE发送时间sended_timedatetimeFALSEFALSE失败重发次数resend_times失败重发次数,每次失败减1,等于0时放弃intFALSEFALSE有效期限void_time超过此期限不再发送datetimeFALSEFALSE5.2.11. 手机短信消息队列名称代码注释数据类型主要的外来键默认值消息流水号id系统自动产生intTRUEFALSE接收时段编号ts_idvarchar(32)FALSETRUE标题titlevarchar(256)FALSEFALSE消息内容contenttextFALSEFALSE消息状态state0 待发 1-在发,2-已发 3-放弃intFALSEFALSE接收号码uidvarchar(32)FALSEFALSE创建时间create_datetimedatetimeFALSEFALSE定时发送时间send_timedatetimeFALSEFALSE发送时间sended_timedatetimeFALSEFALSE失败重发次数resend_timesintFALSEFALSE有效期限void_timedatetimeFALSEFALSE6. 类设计类名类型描述MessageManagerActionAction向界面提供数据和接收页面请求,包括消息注册、消息订阅、消息查看、消息列表MessagePluginsActionAction向插件管理界面提供数据并响应界面请求,消息发送插件及可订阅方式的管理ScheduleManageActionAction为调度管理模块提供页面数据及响应AppManageActionAction向应用管理界面提供数据并响应页面请求MessageManager业务类为上层Action提供消息管理的业务功能,包括:消息注册、获取消息发送许可、获取已注册消息、消息订阅、系统消息管理等功能MessagePlugins业务类为上层Action提供插件管理的业务功能,包括:插件注册、删除等功能MessageSender业务类对所有业务模块及Action提供消息发送API,该类作为消息中心的一个对外接口提供ScheduleManage业务类调度管理,为上层提供调度注册、删除、修复功能AppManage业务类应用管理,为上层提供应用注册、修改、删除及应用相关信息获取的功能MailSenderTask.php调度程序实现从消息中心的邮件队列获取消息并发送到邮件服务器的功能,该文件将被调度程序定时调用执行SmsSenderTask.php调度程序实现从消息中心的手机短信队列获取消息并发送到短信网关的功能,改文件将会被调度程序定期调用7. 接口设计7.1. 用户接口7.2. 硬件接口7.3. 软件接口7.3.1. 规范接口可对其它模块开放的公用接口7.3.2. 非规范接口模块内的私有接口8. 可靠性设计9. 可测试性设计10. 安全性设计11. 关键技术说明12. 开发和运行环境12.1. 硬件环境12.2. 软件环境
展开阅读全文