import requests
import time
import datetime
import json
import pyodbc
def send_message():
# 获取当前时间
current_time = datetime.datetime.now()
# 将时间格式化为字符串
current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S")
# 提取小时和分钟
current_hour = current_time.hour
current_minute = current_time.minute
current_hourstr = str(current_hour) # 提取小时
current_minutestr = str(current_minute) # 提取分钟
# 钉钉机器人的Webhook地址
webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=access_token'
# 用于连接的信息
server = '#######'
database = 'sys_db'
username = 'sa'
password = '############'
# 构建连接字符串
connection_string = 'DRIVER={SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password
# 连接到SQL Server数据库
connection = pyodbc.connect(connection_string)
# 创建一个游标对象
cursor = connection.cursor()
# 执行SQL查询
cursor.execute("select * from sys_table")
# 获取查询结果
results = cursor.fetchall()
# 关闭游标和连接
cursor.close()
connection.close()
if results: # 如果results不为空
# 初始化一个空字符串来存储"number"字段的值
mobir_values = []
#name_to_info = {}
# 初始化一个空字典来存储名称到手机号码列表的映射
name_to_mobis = {}
# 遍历结果集
for row in results:
name = row.name
mobi = row.mobi
all_numbers = row.number
# 检查是否已经存在相同名称的键
if name in name_to_mobis:
name_to_mobis[name].append((mobi,all_numbers))
else:
# 如果不存在,则创建一个新的键,并将手机号码添加到列表中
name_to_mobis[name] = [(mobi,all_numbers)]
# 打印结果
for name, info_list in name_to_mobis.items():
mobis, numbers = zip(*info_list)
numbers_str = ' @'.join(numbers) # 在号码之间添加 "@" 符号
mobis_str = ' @'.join(mobis) # 在手机号码之间添加 "@" 符号
mobir_values.append(mobis)
# 将对象转换为列表
phone_numbers_list = list(mobis)
# 要发送的消息内容
message = {
"msgtype": "markdown",
"markdown": {
"title": "@" + numbers_str + "你有审批流程,请及时处理!",
"text": "#### @" + mobis_str + "\n > 你有"+name+"审批,请及时处理!\n > ###### " + current_hourstr + "点" + current_minutestr + "分发布 [点击前往网站](http://baidu.com) \n"
},
"at": {
"atMobiles": phone_numbers_list, # @指定的手机号,可以为空列表
"isAtAll": False # 是否@所有人
}
}
# 将消息内容转换为JSON格式
message_json = json.dumps(message)
# 发送POST请求
response = requests.post(webhook_url, headers={"Content-Type": "application/json"}, data=message_json)
# 检查响应状态码
if response.status_code == 200:
print(
current_time_str + '---' + "消息发送成功" + '---' + '审批人员:@' + numbers_str + '---' + '审批手机号码:@' + mobis_str + "----" + "流程名称:" +name )
else:
print(current_time_str + '---' + "消息发送失败,状态码:",
response.status_code + '---' + '审批人员:@' + numbers_str + '---' + '审批手机号码:@' + mobis_str + "----" + "流程名称:" + name)
print("响应内容:", response.text)
# 定时器循环,每30分钟运行一次脚本
while True:
# 获取当前时间
current_time = datetime.datetime.now()
# 提取小时和分钟
current_hour = current_time.hour
current_minute = current_time.minute
# 获取当前日期
current_date = datetime.date.today()
# 获取当前日期的星期几(0 表示星期一,1 表示星期二,以此类推,6 表示星期日)
day_of_week = current_date.weekday()
# 判断是否是周日 (星期日,day_of_week 等于 6)
if day_of_week != 6:
#在早上8点到晚上20点之间执行操作
if 8 <= current_hour <= 20:
send_message()
#在其他时间段执行操作或什么都不做
else:
pass
else:
pass
time.sleep(30 * 60) # 休眠30分钟(30 * 60秒)