基于WEBAPP和B/S的媒体生产调度系统

2017-03-24 06:20孙谦诚江苏省广播电视总台
视听界(广播电视技术) 2017年1期
关键词:申请单流程节点

孙谦诚 江苏省广播电视总台

基于WEBAPP和B/S的媒体生产调度系统

孙谦诚 江苏省广播电视总台

本文研究了基于手机微信端的WEBAPP和PC端基于B/S架构的内容生产管理平台的设计和实现。该调度系统通过对微信企业号的定制开发,结合传统PC端的使用,形成以移动设备为简单处理工作及收集发布用户信息,PC设备为全功能媒体内容管理的系统平台。

微信企业号 B/S架构 工作流引擎 冲突自动检测

一、引言

江苏省广播电视总台的大规模设备更新扩建,众多的演播室、转播车及卫星车添加到总台媒体生产的设备中。这些以演播室、转播车和卫星车为设备集合称之为单元。节目单元申请表是技术部门供节目部门提交单元申请,使各单元得到有效高效管理的手段。本文介绍的基于WEBAPP和B/S的媒体生产调度系统可满足节目部门申请单元、查看单元审批,提升单元调度管理人员的管理效率。

二、媒体生产管理系统分析

2.1 系统需求分析

2.1.1 单元分析

根据媒体生产的业务特点以工作地点为分类标准,将总台的媒体生产单元分为演播室、转播车、卫星车。设备单元所需的属性包含:单元序号、使用单位、预约时间、使用日期、开始时间、结束时间、单元用途以及单元使用情况。

2.1.2 业务需求

通过对原有网站的调研,明确原有网站在日常业务工作中的缺失。对于新建的媒体生产调度系统,需要提供以下功能:

(1)提供全信息的查询功能,解决原有系统不可对单元具体信息以及参与媒体生产工作人员排班情况信息查询的问题;

(2)提供单元申请的自动冲突检测判断,弥补原有系统需人工判断的不足;

(3)提供全流程电子信息化申请;

(4)提供传统PC端和移动端操作;

(5)提供广域网登录支持,通过浏览器和微信端直接登录;

(6)提供用户角色权限设置,将系统中的角色设定为单元管理员、频道负责人、单元调度员、权限管理员、消息管理员等;

(7)提供丰富的信息发布手段,提供系统用户手机短信和微信端的信息发布,完善原有系统信息发布渠道单一的问题;

(8)提供使用后的数据统计。

2.2 系统架构

由于系统面向广域网及移动终端的访问,系统选择基于公有云来开发和运行。系统部署在新浪SAE平台上,该平台具有发展时间长,功能完善,文档完整;支持PHP、Java、Python等语言开发,支持使用SVN进行代码的高效维护;覆盖各大城市的多路骨干网络CDN节点,访问速度得到保障;提供综合性短信服务等众多优势。

系统为满足PC端及移动端的访问需求,针对PC的访问需求,系统选择浏览器作为用户入口,针对移动端的访问需求,系统选择微信企业号作为用户入口。PC端选择浏览器作为用户入口可免去用户安装和更新软件,同时浏览器具有跨平台的通用性,更好的兼容该系统。移动端选择微信企业号作为用户入口,免去用户安装及更新APP的麻烦,关注企业号则相对操作简单,减轻系统开发的运维成本。

系统的整体架构由三方面组成:用户终端、微信公众号后台系统以及SAE后台系统。用户终端提供PC端的浏览器访问系统和移动端的微信企业号访问系统。微信企业号面向移动端用户,负责将用户的访问请求转发至SAE后台,同时把SAE后台系统的信息反馈给用户。后台系统是系统处理核心,处理来自PC端浏览器和移动端微信企业号的用户访问需求。媒体生产调度系统整体架构如图1所示。

图1 媒体生产调度系统整体架构

2.3 业务流程分析

2.3.1 单元申请流程

用户使用PC端通过浏览器进行单元申请,也可以使用移动端通过微信进行单元申请,单元申请流程如图2所示。

图2 单元申请流程

2.3.2 单元申请修改

在单元申请的流程下,系统提供了单元申请修改功能。单元的类型分为共享型单元和非共享型单元。共享型单元是指该单元已经被申请期间内允许其他部门申请使用。非共享型单元是指该单元已被申请使用的期间不允许其他部门申请使用。

2.3.3 单元申请撤销

在单元申请流程下,提供单元申请撤销功能。单元申请撤销是指在申请过程中由于节目录制计划的修改。

2.3.4 用户及权限管理

用户角色分为节目人员、频道负责人、电视技术部单元受理执行人员、单元调度人员、权限管理员、消息管理员、超级管理员等。用户及权限管理如图3所示。

图3 用户及权限管理

三、媒体生产管理提供功能设计和实现

3.1 PC端系统功能实现

3.1.1 界面设计实现

通过HTML5/CSS代码实现,将主页分为菜单栏和工作区。菜单栏中的我的菜单包括“用户信息”和“单元管理”,工作区内显示的功能在选择如单元申请、单元管理等具体功能后显示。

3.1.2 单元申请、撤销、修改及审批

选择工作栏中的单元申请。填写单元起始日期、时间和结束日期、时间。申请时,提出关门时间这一概念,即申请时间必须在关门时间之外。频道工作人员在申请单元前,单元的使用情况是其判断是否可申请的条件。单元状态查询的结果通过颜色进行区分。白色背景的单元状态,表示该单元可以被申请,蓝色背景的单元状态,显示在查询时间段内的申请可能与其他单元申请单产生冲突。产生冲突的原因可以通过点击“可能冲突”查看可能产生冲突的其他申请单。这一类显示“可能冲突”的单元仍然可以申请。背景颜色为红色的单元查询结果表示不可用。单元申请页面如图4所示。

图4 单元申请页面

系统提供了单元撤销,可对已经完成审核的申请单进行撤销。用户可以选择申请单元部分撤销或者整体撤销。

系统提供了单元修改的功能区。单元修改只针对共享型单元。非共享型单元由于其特定的设备要求,如果需要修改,可以先整体撤销再重新申请。

单元审批作为单元申请流程中的重要节点,系统提供了完整的三级审批流程。这些关键流程节点包括频道负责人、单元管理员和单元负责人审批。根据用户权限的设置,不同用户登录系统时只显示对应权限的审批任务。

3.1.3 单元申请流程可视化显示

查看审批流程可对审批全链路了解单元审核进程所处状态。通过颜色来区分审批流程节点状态,绿色代表单元申请审核正在进行中,红色表示单元申请拒绝,蓝色表示单元申请审批完成。对于节点审批结果的具体信息,提供具体信息悬停显示功能。流程可视化显示如图5所示。

图5 流程可视化显示

3.2 移动端系统功能实现

移动端系统功能通过手机微信实现。移动端的系统简化PC端的功能,提供用户快速简便的单元申请需求。功能上实现了用户的在线注册,单元申请,单元申请管理,人员管理以及根据用户角色的消息推送。

3.2.1 移动端系统主页面实现

作为移动端常用的系统功能,包括单元申请、我的申请单、我的撤销单、我的修改单、我的排班表等,在移动端的显示更多是对申请审核的确认的消息,而需要在移动端中进行的操作并不多。微信移动端页面如图6所示。

图6 微信移动端页面

3.2.2 公众号、用户验证等功能实现

实名认证是通过微信端关注公众号后,系统后期根据用户录入的信息,通过人工审核,从而确定是否通过认证。

移动端的单元申请和PC端的单元申请规则一致,但对申请信息做了简化,其中只对节目名称,开始、结束时间等信息进行填写。

通过系统申请的各类单据,它的审核情况都可以在移动端查询。页面将自动呈现各类申请单的状况。

四、系统核心功能设计与实现

4.1 流程驱动引擎

超级单元表使用流程引擎作为模块工具,自主开发,充分吸收国内使用JBPM开发BOSS中遇到的问题,工作流引擎只负责参数的收集和流程的流转,具体业务的控制,交给每一个流程定制的控制类去实现。

工作流定义和工作流引擎密切相关,工作流的定义工具负责将现实世界多种确定的业务流程翻译并执行工作流定义。充分利用PHP语言的特点,流程设计基于数据库,程序上采用OO设计,但采用重对象的方法,不将可视化设计流程的工作交给最终用户,而是在设计时完成,因此不用考虑流程版本更新的问题。

4.1.1 工作流数据表设计

工作流数据最直接的区分是将存储在业务系统中的数据称为业务数据,将存储于工作流系统中的数据称为工作流数据。而工作流数据分为工作流控制数据和工作流相关数据。工作流控制数据是工作流系统管理的数据,这些数据包括了参与流程和任务的执行数据。工作流相关数据是在流程中参与业务执行的相关数据。

4.1.2 PHP实现

在PHP实现时,首先定义工作流驱动类Workflow,由它去完成流程跳转逻辑的实现,它根据节点类型以及节点执行的返回数据自动实现流程驱动。数据库采用MySQL。在Workflow类创建时,其构造函数会初始化创建的是哪种流程,根据流程执行节点查询调用该流程模板每个节点对应的执行函数,实现业务执行的流程驱动。

以initThread方法实现为例,该方法是初始化为工作流内部的调用,通过从表t_proc_node中读取进程名称procName和节点ID nodeID。将表中的initFunction流程初始函数、nodeType节点类型、nodeIndex节点序号、prevNodeIndex前一节点序号和nodeName节点名称读取,并将流程初始函数等值存储于initArr数组中,接着更新数据库信息。在数据无出错的情况下进入节点类型的选择。在情况1下,意味着该节点类型需要手动处理,后续工作需要人工处理后调用,此时将在数据库中新建节点,将节点序号、节点名称等值添加到数据节点中。在此过程中如果对初始化函数已经有了设置,初始化结果则返回设置的进程序号。在情况2下,意味着该节点类型为自动处理节点,将自动更新节点信息,并执行节点。在情况3下,假设情况是判断节点,需要调用上一节点的数据来判断下一节点走向,为依靠外部数据来响应。情况4下,为分支并行的节点,通过for语句获取表中所有的子节点信息。情况5下是将分支节点合并。情况6是结束节点。以下以伪代码形式显示:

初始化读取数据

if 数据库表不存在该数据

then 跳转错误结束处理

else 读取表中initFunction、nodeType等变量数据、修改process

表节点为当前节点

if 有错误

then initResult返回error,直接跳转至结束

else swich($nodeType)判断当前节点类型

case1 手动处理节点,需后续人工处理

case2 自动处理节点

case3 先调用上一节点数据,判断节点走向

case4 分支并行

for(i=0,i

读取节点ID,进程ID

case5 合并运行节点

case6 结束节点

执行进程方法runThread方法和transitThread方法也使用类似情况判断方法来执行。

新建流程、获取临时保存参数、初始化进程、初始化线程、获取线程ID、结束进程、增加线程、保存线程、执行线程等方法的实现组成了整个工作流引擎功能。

4.2 智能化冲突检测

在申请单冲突检测算法中有四个判断节点,分别是每一项时间申请的开始时间是否大于结束时间,申请单元是否为共享单元以及两个节点的冲突判断。

开始时需提取申请单、子项目的起止时间等,再将获取的时间换算成秒。在此基础上对每一项时间做是否是跨天申请的判断。对该单元是否为非共享单元判断,如果是则将申请单的总起止时间和已经审核通过的申请单总起止时间比对,如果不是非共享单元则分别对每个子项时间作比对。对这些数据进行比对后,如比对结果冲突则返回冲突值,若不冲突则结束检测。体现在申请业务中即是可否申请该单元。申请单冲突检测算法如图7所示。

图7 申请单冲突检测算法

申请单中有关时间的子项信息众多,且这些时间信息往往跨越很多天,在判断中如果将之作为整体数据进行比较,则会出现总时间计算实现复杂。而以申请单编译表为代表的后端研发主要包括:代表式列表以及字节代码两部分开发。

申请单编译表,将申请单拆分为每一天的申请单,对每天的申请单做冲突判断,所以在算法设计上对于跨天的单元申请只需要对结束时间增加24小时,这样做简化了判断,更可以根据用户需求,对申请单中的某几日做修改等。

通过PHP语言将函数dysqdCompile实现,该函数的变量是申请单的单号。通过对数据表t_thread中dysqdID的提取,将跟随单号下的申请时间,包括总起止时间等信息从data数组中提取。将以“-”为分隔符的填写时间“Y-m-d”组成临时时间数组temp1_arr、temp2_ arr,使用mktime方法将两个数组的数据转化成day1和day2数据,申请单的总天数days则是通过((day2-day1)/3600/24)+1的方法实现。days数据做为申请单编译表拆分的重要数据,将申请单中申请时间数据拆分成以一天为单位的多个申请单。

4.3 自动化消息通知及确认机制

自动化消息通知及确认机制主要分为微信和短信消息两部分。微信消息通知主要利用微信后台系统建立模板消息,系统调用微信公众平台提供的接口实现模板消息的发送。

短信通知功能则为自行研发,通过短信猫实现短信的发送。

五、总结

基于WEBAPP和B/S的媒体生产设备管理系统的创新点主要有以下五点:

(1)以微信公众号为入口,采用B/S架构同时支持移动端和PC端操作。

(2)系统采用工作流引擎驱动,实现流程可视化操作。

(3)具备多种信息发布手段,实现自动化的消息推送通知。

(4)利用公有云平台资源,最大限度降低了开发和运维量。

(5)采用智能的冲突互斥算法,大大提高单元申请和审批的效率。

该项目解决了节目生产过程中对设备单元申请使用等方面的问题,满足了江苏电视台现代化生产的需求。

猜你喜欢
申请单流程节点
CM节点控制在船舶上的应用
Analysis of the characteristics of electronic equipment usage distance for common users
吃水果有套“清洗流程”
PDCA 循环在临床输血申请单书写质量持续改进中的作用分析
基于AutoCAD的门窗节点图快速构建
临床输血申请单不合格项目分析及应对措施
违反流程 致命误判
我院检查申请单流程设计与应用
PDCA循环在输血申请单规范填写管理中的作用
本刊审稿流程