Skip to content

值班管理系统(gm_oncall)

人员划分

  1. 协调人

  2. 运维负责人

  3. 数据库负责人

  4. web负责人

  5. 异步负责人

运行流程

钉钉机器人定时发送调查链接,此时将所有人员状态置为不在线状态0,提醒运维群人 员进行状态登记

发送频率: 判断工作日与非工作日,两种情况的发送时间和频率会有所不同,发送的频率、时间 配置写到配置文件当中,对应工作日时间配置和非工作日时间配置。

链接页面分为两部分:

    状态选择部分:人员在这里填写自己的名字和选择对应的状态并提交
    状态显示部分:显示员工状态,管理人员可以查看每日的人员状态信息。

如果一个小时以内未点击链接修改自身状态,系统隔十分钟拨打提醒电话进行提醒,超过三次 提醒未得到回应则放弃提醒。

怎样判断人员配备是否充足?

发送链接之后的每一个小时,系统检测所有人的状态,根据以下逻辑判断人员配备是否充足,符合 不进行操作,不符合拨打larry电话进行人员配备不足报警提醒。

    判断逻辑:运维和协调人各自至少一人可及时上线支持各领域负责人至少一人可以
            上线支持,即最少的情况为:运维1人、协调人1人、数据库1人、web
            1人,异步1人,少于这个数量则认为人员配备不足

配置选项

发送频率配置

分为两种情况:工作日发送时间列表配置、非工作日发送时间列表配置

如:8:00:00代表8点发送一次,可配置多个发送时间

腾讯语音消息配置

配置发送消息模板,人员配备不足时的报警电话

人数判断配置

对应每个职责下应该各至少有n个人可以及时上线支持,不同职责的n值可以配置,低于这个值则 会触发报警

数据库相关(mysql)

tbl_member,成员表

CREATE TABLE `tbl_member` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工id',
  `name` varchar(10) NOT NULL DEFAULT '' COMMENT '姓名',
  `number` varchar(11) CHARACTER SET latin1 NOT NULL COMMENT '手机号码',
  `status` int(11) NOT NULL COMMENT '业务状态',
  `create_time` datetime(6) NOT NULL COMMENT '创建时间',
  `modify_time` datetime(6) NOT NULL COMMENT '修改时间',
  `delete_time` datetime(6) NOT NULL COMMENT '删除时间',
  `pstatus` int(11) NOT NULL COMMENT '物理状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

tbl_area,领域表

CREATE TABLE `tbl_area` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '领域id',
  `area` int(11) NOT NULL COMMENT '所属领域',
  `create_time` datetime(6) NOT NULL COMMENT '创建时间',
  `modify_time` datetime(6) NOT NULL COMMENT '修改时间',
  `delete_time` datetime(6) NOT NULL COMMENT '删除时间',
  `pstatus` int(11) NOT NULL COMMENT '物理状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

tbl_relations,员工与领域多对多关系表

CREATE TABLE `tbl_relations` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '关系id',
  `member_id` int(11) NOT NULL COMMENT '员工id',
  `area_id` int(11) NOT NULL COMMENT '领域id',
  `create_time` datetime(6) NOT NULL COMMENT '创建时间',
  `modify_time` datetime(6) NOT NULL COMMENT '修改时间',
  `delete_time` datetime(6) NOT NULL COMMENT '删除时间',
  `pstatus` int(11) NOT NULL COMMENT '物理状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;

接口相关

定时脚本部分(crontab_task.py)

定时发送钉钉消息
读取配置文件,根据设定的时间进行消息发送请求,成功发送消息之后将所有人的状态置为不在线状态。
定时判断是否更改状态
发送链接之后的一个小时后查看所有人员的状态,如果有人的状态还是处于初始状态,则拨打该员工的手机
号码进行提醒,如未应答,隔10分钟再提醒一次,提醒超过三次之后还未应答放弃提醒。
定时判断人员是否充足
在发送调查链接之后,下次调查链接发送之前,每隔一个小时检测所有人的状态,根据判断逻辑判断人员
配备是否充足,如不足,会拨打电话进行报警

/choose 填写状态接口

接口描述:
        员工填写自己的名字
        可选择状态:
        0. 初始状态(默认),即不在线状态
        1. 可以及时上线支持 
        2. 无法上线支持,但我可以保持手机畅通 

请求方法:POST

请求参数:
        name        M       string      #填写人
        status      M       int         #状态

响应参数:
        code        M       int         #0为成功,其它为失败
        msg         M       string      #错误提示信息

逻辑:每个人的默认状态为不在线状态,通过姓名和状态可以更改对应的状态,
并且如果员工因为情况变动需要修改状态,可以填写姓名和状态再次进行更改

/show 状态显示接口

接口描述:
        后台查询,返回每个人对应的状态信息,方便员工查看自己是否
        提交成功,管理员也可以在此查看每个员工的状态

请求方法:GET

请求参数:无

响应参数:
        code        M       int         #0为成功,其它为失败
        msg         M       string      #错误提示信息
        data        M       dict        #每个人的具体状态


/reset 重置状态接口

请求方法:GET

请求参数:无

响应参数:
        code        M       int         #0为成功,其它为失败
        msg         M       string      #状态提示信息

逻辑:重置所有员工的状态

oapi.dingtalk.com/robot/send?access_token 第三方钉钉机器人发送消息接口

接口描述:
        接口用于在群里发送消息,消息为调查链接的url

请求方法:POST

请求参数:
        msgtype     M       string      #消息类型
        content     M       string      #消息内容
        atMobiles   O       array       #被@人的手机号(在content里添加@人的手机号)
        isAtAll     O       bool        #@所有人时:true,否则为:false

响应参数:
        errmsg      M       string      #返回响应提示消息
        errcode     M       int         #响应状态码,0表示成功

逻辑:根据设定的发送频率请求该接口,发送调查链接,根据返回的状态码判断是否成功,成功之后将
所有人的状态置为初始状态,要求员工重新选择状态,不成功则重复请求

cloud.tim.qq.com/v5/tlsvoicesvr/sendvoiceprompt 第三方腾讯云通讯短信平台

接口描述:
        接口用于提醒员工选择状态和人员不足时报警提醒

请求方法:POST

请求参数:
        ext         O       string      #用户的 session 内容,腾讯 server 回包中会原样返回。
        playtimes   O       int         #播放次数,可选,最多3次,默认2次。
        promptfile  M       string      #通知内容,utf8 编码,支持中文英文、数字及组合
        prompttype  M       int         #语音类型,目前固定为2。
        sig         M       string      #App 凭证,具体计算方式见下注。
        tel         M       object      #电话号码。
        time        M       int         #请求发起时间,UNIX 时间戳,如果和系统时间相差超过10分钟则会返回失败。
其中tel参数又包括:
        mobile      M       string      #手机号码
        nationcode  M       string      #国家码

响应参数:
        result      M       int         #错误码,0 表示成功(计费依据),非 0 表示失败
        errmsg      M       string      #错误消息,result 非 0 时的具体错误信息
        callid      O       string      #标识本次发送 ID,标识一次下发记录
        ext         O       string      #用户的 session 内容,腾讯 server 回包中会原样返回

逻辑:请求腾讯云通讯接口,发送语音消息,调用接口返回调用结果对应的状态码

单元测试用例:

/choose 填写状态接口的测试用例:
分两种,对于名字和状态分别进行post测试
test_name:
1.若名字输入为空,状态正常输入的情况下,应该返回的code为错误码为:3001,msg为'名字不符'
2.若名字输入不存在或错误,状态正常输入的情况下,应该返回的code为错误码为:3001,msg为'名字不符'
3.若名字输入为空,状态也为空的情况下,应该返回的code为错误码为:3001,msg为'名字不符'(因为开发逻辑部分只分
  为名字错误和状态错误这两种情况,但是这种状态也可以处理,默认这种)
4.若名字输入正确,状态输入也正确的情况下,应该返回的code为:0,msg为'OK',并且data里人员的状态应更新,
  可以测试刚才post的人员的status是否更新成功

test_status
1.若名字输入正确,状态为空的情况下,应该返回的code为错误码为:3002,msg为'状态不符'
2.若名字输入正确,状态输入不存在的情况下,应该返回的code为错误码为:3002,msg为'状态不符'
3.若名字输入正确,状态输入正确的情况下,应该返回的code为:0,msg为'OK',并且data里人员的状态应更新,
  可以测试刚才post的人员的status是否更新成功

 /show 状态显示接口的测试用例:
 show接口的功能主要是获取所有人员最新状态,并将数据返回前端,让前端进行展示,测试用例如下:
 1.对show接口进行get操作,看操作是否能正常进行,正常则返回code为:0,msg:'OK',和所有人当前的状态信息data

 /reset 重置状态接口的测试
 1.对reset接口进行get操作,看操作是否能正常进行,正常则返回code为:0,msg:'OK'

开发计划

钟智强
4.11 工程架构搭建,编写配置文件

4.12 请求第三方钉钉接口,定时发送脚本的编写

4.15 编写填写状态接口,接口自测

4.16 编写显示状态接口,重置状态接口,优化项目目录结构,更改配置文件格式

4.17 修改工程的View部分,符合往期工程的结构,定时判断人员是否充足脚本的编写,对接腾讯云通讯短信平台

4.18 定时判断是否更改状态脚本的编写,前端代码的实现

4.19 代码联调,自测以及辅助自动化测试部分

肖冬梅

4.11  编写gitlab_ci.yml

4.12 、4.15 学习python和单元测试request模块和unittest模块

4.16  编写choose接口的单元测试和show接口的单元测试

4.17  配置工程环境需要的docker镜像环境,更新gitlab-ci.yml文件,优化测试报告输出部分

4.18  编写重置接口的单元测试和钉钉接口的单元测试

4.19  编写判断人员是否充足和调用第三方腾讯通讯平台部分的单元测试

4.22  部署整个项目工程 接口测试 联调