每天禅道超时任务、超时未开始任务发送飞书提醒

前言

最近应公司要求要把禅道上的超时任务、超出时间没有开始的任务,发送到公司飞书群里。

禅道是干什么的,怎么部署我这里就不再赘述了,可以参考下面的连接。

https://www.zentao.net/dynamic/zentaopms12.5.3-80319.html

环境:centos 7.9

这里写了两个简单的小脚本供大家参考。


一、创建飞书群机器人

1、创建群组,已有群的找到群设置。

 2、创建群机器人。

 

机器人名称你随意。

记好webhook地址一会儿就要用这个地址发送消息的。

这里我用的自定义关键词做的安全设置,你也可以用其他方式,关键词是你在向群里发送消息时必须包含的,否则无法发送的群里会被自动屏蔽掉。

这样群机器人就创建好了。

二、编写发送Python脚本

1.查询今天以前的逾期任务(不包含今天)

    这里用到的数据库名是禅道原数据库名。

   逾期任务@所有人 代码如下(示例):

#!/usr/bin/python
# conding=utf-8
# Timeout Task

import json
import pymysql
import requests

# 打开数据库连接
# IP 账号 密码 写你们自己的 还有端口写我的你连不上
db = pymysql.connect(host="mysql_ip", user="root", password="*****",
                     port=3306, db='zentao', charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# sql语句查询
sql = "SELECT p.NAME AS p_name, t.NAME AS t_name, t.id as 任务ID, t.story as 需求ID, t.deadline, t.estStarted, " \
      "u.realname, u.mobile FROM zt_task t LEFT " \
      "JOIN zt_project p ON t.project = p.id LEFT JOIN zt_user u ON t.assignedTo = u.account WHERE t.deadline < " \
      "date_format( now(), '%y-%m-%d' ) AND t.STATUS = 'doing' AND t.deleted = '0'"

# 使用 execute()  方法执行 SQL 查询
cursor.execute(sql)
result = cursor.fetchall()

str1 = '     ------任务逾期风险预警------\n\n'
at = []

for row in result:
    #  for row in range(len(it)):
    name = row[0]
    task = row[1]
    taskid = row[2]
    needid = row[3]
    deadline = row[4]
    eststarted = row[5]
    realname = row[6]
    mobile = row[7]
    at.append(mobile)
    str1 += "【项目:" + str(name) + "】\n 任务:" + str(task) + "\n 任务ID:" + str(taskid) + "\n 需求ID: " + str(
        needid) + "\n 预计开始时间:" + str(eststarted) + "\n 截止时间:" + str(deadline) + " \n 负责人员:" + str(realname) + "\n\n"

# 这个用来排查是否有数据
# print(str1, result)

# 关闭数据库连接
db.close()

# 判断是否有内容
if result:
    # 发送群消息@所有人
    sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
    data = {
        "content": dict(text="<at user_id='all'></at> \n" + str1),
        "msg_type": "text"
    }
    request = requests.post(sendurl, json.dumps(data))

else:
    # 发送群消息@所有人
    sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
    data = {
        "content": {
            "text": "<at user_id='all'></at> \n" "  没有逾期的项目! ⁣[大笑]"},
        "msg_type": "text"
    }
    request1 = requests.post(sendurl, json.dumps(data))

2.查询今天以前的超时未开始任务(不包含今天)

超时未开始任务@所有人 代码如下(示例):

#!/usr/bin/python
# conding=utf-8

import json
import pymysql
import requests

# 打开数据库连接
# IP 账号 密码 写你们自己的 还有端口写我的你连不上
db = pymysql.connect(host="mysql_ip", user="root", password="*****",
                     port=3306, db='zentao', charset='utf8')

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# sql语句查询

sql = "SELECT p.NAME AS p_name, t.NAME AS t_name, t.id AS 任务ID, t.story AS 需求ID, t.deadline, t.estStarted, \
       u.realname, u.mobile FROM zt_task t LEFT JOIN zt_project p ON t.project = p.id LEFT JOIN \
       zt_user u ON  t.assignedTo = u.account WHERE t.estStarted < date_format( now( ), '%y-%m-%d' ) \
       AND t.STATUS = 'wait' AND t.deleted = '0' AND t.estStarted != '0000-00-00';"

# 使用 execute()  方法执行 SQL 查询
cursor.execute(sql)
result = cursor.fetchall()

str1 = '    ------任务未开始提醒------\n\n'
at = []
for row in result:
    #    for row in range(len(it)):
    name = row[0]
    task = row[1]
    taskid = row[2]
    needid = row[3]
    deadline = row[4]
    eststarted = row[5]
    realname = row[6]
    mobile = row[7]
    at.append(mobile)
    str1 += "【项目:" + str(name) + "】\n 任务:" + str(task) + "\n 任务ID:" + str(taskid) + "\n 需求ID: " + str(
        needid) + "\n 预计开始时间:" + str(eststarted) + "\n 截止时间:" + str(deadline) + " \n 负责人员:" + str(realname) + "\n\n"

print(str1)

# 关闭数据库连接
# cursor.close()
db.close()

if result:
    # 发送群消息@所有人
    sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
    data = {
        "content": dict(text="<at user_id='all'></at> \n" + str1),
        "msg_type": "text"
    }
    request = requests.post(sendurl, json.dumps(data))
    # print(request, data)

else:
    # 发送群消息@所有人
    sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
    data = {
        "content": {
            "text": "<at user_id='all'></at> \n" "  没有未开始的项目! ⁣[大笑]"},
        "msg_type": "text"
    }
    request1 = requests.post(sendurl, json.dumps(data))

3.测试结果

逾期任务(示例):

超时未开始任务(示例):

4.创建定时任务

我的是centos7.9 用的crontab 创建

命令:crontab -e 

当然你们自己也可以自己定义你们的发送消息时间

我的时间规则 :

周一到周五早上10点提醒任务未开始。

周一到周五下午1点钟和下午6点钟提醒逾期未完成任务。

至此整个推送告警脚本就结束了。


飞书机器人@单个人或者所有人:https://open.feishu.cn/document/ugTN1YjL4UTN24CO1UjN/uUzN1YjL1cTN24SN3UjN

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值