建设银行官方网站登,广州电商网站建设,wordpress首页截断插件,网络基础知识Python自动化办公,
1.需求分析
系统维护及开发人员的工作一般都会比较繁杂,领导们喜欢实时掌控项目的进度,但是领导们很多时候是不会自己主动去查看及分析项目进度数据的,干活的牛马们也没空整天日报,周报,月报,季报,年报…活又有了,又该想想怎么干,需求的核心是实现自动整理…Python自动化办公,
1.需求分析
系统维护及开发人员的工作一般都会比较繁杂,领导们喜欢实时掌控项目的进度,但是领导们很多时候是不会自己主动去查看及分析项目进度数据的,干活的牛马们也没空整天日报,周报,月报,季报,年报…活又有了,又该想想怎么干,需求的核心是实现自动整理数据,数据图表化后自动推送,本公司工程软件部的所有任务分配都是在工程管理系统上排定,任务的详细进度及达成数据需要自行导出分析,这个部分很不符合我们的自动化宗旨,我们就从这部分需求下手,任务执行及达成状况自动推送到相关人员,领导也可实时掌控工作任务状况.
2.实现逻辑
需求有了,我们看看具体的实施逻辑
首先,所有的项目开发及维护分配任务是已经有了的(会要求所有需求都登记在内部开发的工程管理系统需求处理模块),我们只需要获取所有工作任务并按要求分析整理好并图表化,此部分数据我们直接去工程管理系统数据库查表获取(推荐还是通过接口获取)其次,我们解析并整理任务数据,此部分数据图表展示按自身实际需求去处理再次,我们以企业微信消息推送方式推送数据信息最后,我们制订任务计划,让所有的信息按要求每天推送
效果演示
自动企微推送(没有可以邮件推送) 推送的详细数据报告及图表(用html网页编写,数据按自己需求即可,此处仅做案例展示)
3.代码实现
一些参数信息我们用标准的JSON{
图表存储位置: /Linux存放生成的图表图片目录/end_img,
win系统图表存储位置: S:\\Windows存放生成的图表图片目录\\end_img,
html缓存位置: Linux存放生成的html文件路径/html_cache,
win系统html缓存位置: P:\\Windows存放生成的html文件路径\\工程管理系统缓存
}首先获取我们的工程管理数据库需求数据(推荐使用接口获取)# 获取全部需求信息数据
def _get_base_data(self):获取全部需求信息数据:return: 基础信息数据字典列表_where if self.sys in [工程软件组CAM系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (Incam, Genesis))elif self.sys in [工程软件组MI系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (Inplan, 物料))elif self.sys in [工程数据组工程管理系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (工程管理系统))elif self.sys in [工程数据组LOT卡系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (LOT卡))elif self.sys in [工程软件部联络函]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (联络函))elif self.sys in [日常维护其他]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) not in (Incam, Genesis, Inplan, 物料, 工程管理系统, LOT卡, 联络函))_sql fSELECT (SELECT DicName FROM sys_dictionarylist WHERE Dic_ID(SELECT Dic_ID FROM sys_dictionary WHERE DicNoSite) AND DicValuerequirement_0_main.Site) AS 基地,(SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) AS 需求软件,(SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NOT NULL AND Idrequirement_0_main.RequireType) AS 需求类别,(SELECT DicName FROM sys_dictionarylist WHERE Dic_ID(SELECT Dic_ID FROM sys_dictionary WHERE DicNoRequireStatus) AND DicValuerequirement_0_main.RequireStatus) AS 需求状态,JobName AS 参考料号,Topic AS 主题,Detail AS 详细描述,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.Register) AS 登记人,RegisterDate AS 登记时间,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.RequireAudit) AS 需求审核人,RequireAuditTime AS 需求审核时间,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.DevAuditor) AS 开发审核人,DevAuditorTime AS 开发审核时间,PlannedCompletionTime AS 计划完成时间,ActualCompletionTime AS 实际完成时间,ActualCompletionTime AS 实际完成时间,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.TestPerson) AS 测试人,TestTime AS 测试时间,(SELECT DicName FROM sys_dictionarylist WHERE Dic_ID(SELECT Dic_ID FROM sys_dictionary WHERE DicNoTestResult) AND DicValuerequirement_0_main.TestResult) AS 测试结果,TestRemark AS 测试意见,TestBackTimes AS 退回次数FROM requirement_0_main{_where}_data self.sql.exec_query(_sql)return _data 整理数据生成图表(根据需求产生需要的数据及图表) # 统计各基地需求信息def _get_reviewed_info(self, _site):统计各基地需求信息:return:_dict {}_num 0for i in self.data:if _site in [湖南, 广东, 泰国台湾, 全部]:if i[基地] _site:_num 1if i[需求状态] not in _dict.keys():_dict[i[需求状态]] 0_dict[i[需求状态]] 1else:_num 1if i[需求状态] not in _dict.keys():_dict[i[需求状态]] 0_dict[i[需求状态]] 1_str _siteif _site in [全部]:_str 其他if _site not in [湖南, 广东, 泰国台湾, 全部]:_str # 中文标签plt.rcParams[font.sans-serif] [STKaiti] # 指定默认字体plt.rcParams[axes.unicode_minus] False # 解决负号-显示为方块的问题# 创建图像# 组合标签和数据,并根据数据排序data sorted(zip(_dict.keys(), _dict.values()), keylambda x: x[1], reverseTrue)if len(data) 0:returnlabels, sizes zip(*data)labels tuple([i.split()[0] ,\n i.split()[1] if in i else i for i in list(labels)])# 获取所有颜色_colors list(colors.TABLEAU_COLORS.values())plt.figure(figsize(12, 6)) # 设置图像大小为8x6plt.bar(labels, sizes, width0.3, color_colors, edgecolorblack)plt.title(f{_str}需求汇总({time.strftime(%Y-%m-%d, time.localtime())}), fontsize16) # 添加标题plt.xlabel(f{_str}总需求汇总数量:{_num}, fontsize14) # 添加x轴标签plt.ylabel(数量, fontsize12) # 添加y轴标签plt.xticks(fontsize10) # 设置x轴刻度标签字体大小plt.yticks(fontsize10) # 设置y轴刻度标签字体大小# 添加数据标签for i, v in enumerate(sizes):plt.text(i, v 1, str(v), hacenter, fontsize10)plt.tight_layout() # 自动调整布局plt.savefig(f{self.img_path}/{_str}成本管理中心需求汇总.png)self.img_list.append(f{self.img_path}/{_str}成本管理中心需求汇总.png)# plt.show()信息推送(邮件推送及企业微信推送) # 企微推送
def _send_wechat_message(self):推送信息:return:img_data_list []for i in self.img_list:with open(i, rb) as f:img_data_list.append(fimg srcdata:image/png;base64,%s altEmbedded Image %base64.b64encode(f.read()).decode(utf-8))_h \n.join(img_data_list)html_text htmlheadstyle.timestamp {font-size: 24px;}.container {margin: 20px;display: flex;flex-wrap: wrap;justify-content: space-between;}.container img {margin: 20px;max-width: 46%%;margin-bottom: 4%%;border-radius: 10px;object-fit: cover;object-position: center;}body {margin: 10px;background-color: #170044;color: #FFF;}/style/headbodyh2 styletext-align: center;font-size: 30px;margin-left: 20px; margin-right: 20px;所有基地nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;成本管理中心需求汇总(%s)nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;%s/h2div classcontainer%s/div/body/html % (self.sys, time.strftime(%Y-%m-%d, time.localtime()), _h)self.html_file f{self.html_path}\\{self.sys}-{time.strftime(%Y-%m-%d, time.localtime())}.htmlwith open(self.html_file, w) as f:f.write(html_text)_wc WeChatMessage()_dict _wc.get_users_id()_users_id [list(i.values())[0] for i in _dict[工程软件部] _dict[工程数据组]]# _users_id [list(i.values())[0] for i in _dict[工程软件部]]if self.sys 工程软件组CAM系统:_users_id [list(i.values())[0] for i in _dict[工程软件组]if list(i.keys())[0] in [张三, 田甜, 姚胜兰]]elif self.sys 工程软件组MI系统:_users_id [list(i.values())[0] for i in _dict[工程软件组]if list(i.keys())[0] in [罗秀青, 吴贤宗, 朱奇敏, 许定红]]elif self.sys 工程数据组工程管理系统:_users_id [list(i.values())[0] for i in _dict[工程数据组]]elif self.sys 工程数据组LOT卡系统:_users_id [list(i.values())[0] for i in _dict[工程数据组]]# # 测试用# _users_id [list(i.values())[0] for i in _dict[工程软件组]# if list(i.keys())[0] in [张三]]locale.setlocale(locale.LC_ALL, zh_CN.UTF-8)_wc.send_text_card_message(to_users_users_id,agent_id1000039,file_urlself.html_file,_titlef成本管理中心{self.sys}需求汇总-f{time.strftime(%Y年%m月%d日, time.localtime())})# 发送邮件
def _send_mail(self):发送邮件:return:img_data_list []for i in self.img_list:with open(i, rb) as f:img_data_list.append(fimg srcdata:image/png;base64,%s altEmbedded Image %base64.b64encode(f.read()).decode(utf-8))_h \n.join(img_data_list)html_text htmlheadstyle.timestamp {font-size: 24px;}.container {margin: 20px;display: flex;flex-wrap: wrap;justify-content: space-between;}.container img {margin: 20px;max-width: 46%%;margin-bottom: 4%%;border-radius: 10px;object-fit: cover;object-position: center;}body {margin: 10px;background-color: #170044;color: #FFF;}/style/headbodyh2 styletext-align: center;font-size: 30px;margin-left: 20px; margin-right: 20px;所有基地nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;成本管理中心需求汇总nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;%s/h2div classcontainer%s/div/body/html % (time.strftime(%Y-%m-%d, time.localtime()), _h)_to_list [pe_softwareaskpcb.com,shenglan.yaoaskpcb.com,zhangliangaskpcb.com,xiuqing.luoaskpcb.com]try:SM sendMail.MailMain(益阳210服务器(系统需求汇总分析.py),sysinfoaskpcb.com,_to_list,f{html_text},f成本管理中心需求汇总)SM.SendMail(text_typehtml)print(邮件发送成功)except BaseException as e:print(f邮件发送失败错误详情:{e})完成代码#!/usr/bin/env py3kimport re
import sys
import os
import random
import time
import locale
import base64
import platform
import matplotlib.pyplot as plt
from matplotlib import colorsif platform.system() Windows:sys.path.append(S:\\site_data\\scripts\\py3_package)
else:sys.path.append(/incam/server/site_data/scripts/py3_package)
from SqlClasses import AskMiMySqlServer
from GuiClasses import *
from ApiClasses import *
import sendMail# 开发日志
_header {脚本名称: 系统需求汇总分析程式,开发人员: Twei Tang,开发时间: 2023年11月21日,版本信息: A.1.1,联系方式: (邮箱地址,微信号码358143105,手机号码13627441202),开发信息: (无),修改信息: (历史版本(A.1.0),首次开发测试,暂无版本变更信息,当前版本(A.1.1),添加台湾泰国需求汇总数据,修改工程管理中心为成本管理中心,2024/5/15,周三,唐伟),沟通记录: (无)
}class DoMain:def __init__(self):self.app QApplication(sys.argv)self.gui MainGui()self.sql AskMiMySqlServer(_port3360, dbepms) # 字典形式返回数据self.sys 所有系统if len(sys.argv) 1:if sys.argv[1] in [CAM系统]:self.sys 工程软件组CAM系统elif sys.argv[1] in [MI系统]:self.sys 工程软件组MI系统elif sys.argv[1] in [管理系统]:self.sys 工程数据组工程管理系统elif sys.argv[1] in [LOT系统]:self.sys 工程数据组LOT卡系统elif sys.argv[1] in [联络函]:self.sys 工程软件部联络函else:self.sys 日常维护其他self.data self._get_base_data()if platform.system() Windows:self.m_json self.gui.GetConFigMethods(S:\\site_data\\scripts\\py3_package\\config\\公共制作\\系统需求汇总配置文档.json)self.img_path self.m_json[win系统图表存储位置]self.html_path self.m_json[win系统html缓存位置]else:self.m_json self.gui.GetConFigMethods(self.gui.config_path /公共制作/系统需求汇总配置文档.json)self.img_path self.m_json[图表存储位置]self.html_path self.m_json[html缓存位置]self.img_list []# 获取全部需求信息数据def _get_base_data(self):获取全部需求信息数据:return: 基础信息数据字典列表_where if self.sys in [工程软件组CAM系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (Incam, Genesis))elif self.sys in [工程软件组MI系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (Inplan, 物料))elif self.sys in [工程数据组工程管理系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (工程管理系统))elif self.sys in [工程数据组LOT卡系统]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (LOT卡))elif self.sys in [工程软件部联络函]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) in (联络函))elif self.sys in [日常维护其他]:_where (WHERE (SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) not in (Incam, Genesis, Inplan, 物料, 工程管理系统, LOT卡, 联络函))_sql fSELECT (SELECT DicName FROM sys_dictionarylist WHERE Dic_ID(SELECT Dic_ID FROM sys_dictionary WHERE DicNoSite) AND DicValuerequirement_0_main.Site) AS 基地,(SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NULL AND Idrequirement_0_main.RequireSoftware) AS 需求软件,(SELECT TypeValue AS _VALUE FROM requirement_1_type WHERE ParentId IS NOT NULL AND Idrequirement_0_main.RequireType) AS 需求类别,(SELECT DicName FROM sys_dictionarylist WHERE Dic_ID(SELECT Dic_ID FROM sys_dictionary WHERE DicNoRequireStatus) AND DicValuerequirement_0_main.RequireStatus) AS 需求状态,JobName AS 参考料号,Topic AS 主题,Detail AS 详细描述,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.Register) AS 登记人,RegisterDate AS 登记时间,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.RequireAudit) AS 需求审核人,RequireAuditTime AS 需求审核时间,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.DevAuditor) AS 开发审核人,DevAuditorTime AS 开发审核时间,PlannedCompletionTime AS 计划完成时间,ActualCompletionTime AS 实际完成时间,ActualCompletionTime AS 实际完成时间,(SELECT UserTrueName FROM sys_user WHERE User_Id requirement_0_main.TestPerson) AS 测试人,TestTime AS 测试时间,(SELECT DicName FROM sys_dictionarylist WHERE Dic_ID(SELECT Dic_ID FROM sys_dictionary WHERE DicNoTestResult) AND DicValuerequirement_0_main.TestResult) AS 测试结果,TestRemark AS 测试意见,TestBackTimes AS 退回次数FROM requirement_0_main{_where}_data self.sql.exec_query(_sql)return _data# 统计各基地需求信息def _get_reviewed_info(self, _site):统计各基地需求信息:return:_dict {}_num 0for i in self.data:if _site in [湖南, 广东, 泰国台湾, 全部]:if i[基地] _site:_num 1if i[需求状态] not in _dict.keys():_dict[i[需求状态]] 0_dict[i[需求状态]] 1else:_num 1if i[需求状态] not in _dict.keys():_dict[i[需求状态]] 0_dict[i[需求状态]] 1_str _siteif _site in [全部]:_str 其他if _site not in [湖南, 广东, 泰国台湾, 全部]:_str # 中文标签plt.rcParams[font.sans-serif] [STKaiti] # 指定默认字体plt.rcParams[axes.unicode_minus] False # 解决负号-显示为方块的问题# 创建图像# 组合标签和数据,并根据数据排序data sorted(zip(_dict.keys(), _dict.values()), keylambda x: x[1], reverseTrue)if len(data) 0:returnlabels, sizes zip(*data)labels tuple([i.split()[0] ,\n i.split()[1] if in i else i for i in list(labels)])# 获取所有颜色_colors list(colors.TABLEAU_COLORS.values())plt.figure(figsize(12, 6)) # 设置图像大小为8x6plt.bar(labels, sizes, width0.3, color_colors, edgecolorblack)plt.title(f{_str}需求汇总({time.strftime(%Y-%m-%d, time.localtime())}), fontsize16) # 添加标题plt.xlabel(f{_str}总需求汇总数量:{_num}, fontsize14) # 添加x轴标签plt.ylabel(数量, fontsize12) # 添加y轴标签plt.xticks(fontsize10) # 设置x轴刻度标签字体大小plt.yticks(fontsize10) # 设置y轴刻度标签字体大小# 添加数据标签for i, v in enumerate(sizes):plt.text(i, v 1, str(v), hacenter, fontsize10)plt.tight_layout() # 自动调整布局plt.savefig(f{self.img_path}/{_str}成本管理中心需求汇总.png)self.img_list.append(f{self.img_path}/{_str}成本管理中心需求汇总.png)# plt.show()def _send_wechat_message(self):推送信息:return:img_data_list []for i in self.img_list:with open(i, rb) as f:img_data_list.append(fimg srcdata:image/png;base64,%s altEmbedded Image %base64.b64encode(f.read()).decode(utf-8))_h \n.join(img_data_list)html_text htmlheadstyle.timestamp {font-size: 24px;}.container {margin: 20px;display: flex;flex-wrap: wrap;justify-content: space-between;}.container img {margin: 20px;max-width: 46%%;margin-bottom: 4%%;border-radius: 10px;object-fit: cover;object-position: center;}body {margin: 10px;background-color: #170044;color: #FFF;}/style/headbodyh2 styletext-align: center;font-size: 30px;margin-left: 20px; margin-right: 20px;所有基地nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;成本管理中心需求汇总(%s)nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;%s/h2div classcontainer%s/div/body/html % (self.sys, time.strftime(%Y-%m-%d, time.localtime()), _h)self.html_file f{self.html_path}\\{self.sys}-{time.strftime(%Y-%m-%d, time.localtime())}.htmlwith open(self.html_file, w) as f:f.write(html_text)_wc WeChatMessage()_dict _wc.get_users_id()_users_id [list(i.values())[0] for i in _dict[工程软件部] _dict[工程数据组]]# _users_id [list(i.values())[0] for i in _dict[工程软件部]]if self.sys 工程软件组CAM系统:_users_id [list(i.values())[0] for i in _dict[工程软件组]if list(i.keys())[0] in [张三, 田四, 姚老五]]elif self.sys 工程软件组MI系统:_users_id [list(i.values())[0] for i in _dict[工程软件组]if list(i.keys())[0] in [罗八, 吴九, 朱十一, 许大麻]]elif self.sys 工程数据组工程管理系统:_users_id [list(i.values())[0] for i in _dict[工程数据组]]elif self.sys 工程数据组LOT卡系统:_users_id [list(i.values())[0] for i in _dict[工程数据组]]# # 测试用# _users_id [list(i.values())[0] for i in _dict[工程软件组]# if list(i.keys())[0] in [唐伟]]locale.setlocale(locale.LC_ALL, zh_CN.UTF-8)_wc.send_text_card_message(to_users_users_id,agent_id1000039,file_urlself.html_file,_titlef成本管理中心{self.sys}需求汇总-f{time.strftime(%Y年%m月%d日, time.localtime())})# 发送邮件def _send_mail(self):发送邮件:return:img_data_list []for i in self.img_list:with open(i, rb) as f:img_data_list.append(fimg srcdata:image/png;base64,%s altEmbedded Image %base64.b64encode(f.read()).decode(utf-8))_h \n.join(img_data_list)html_text htmlheadstyle.timestamp {font-size: 24px;}.container {margin: 20px;display: flex;flex-wrap: wrap;justify-content: space-between;}.container img {margin: 20px;max-width: 46%%;margin-bottom: 4%%;border-radius: 10px;object-fit: cover;object-position: center;}body {margin: 10px;background-color: #170044;color: #FFF;}/style/headbodyh2 styletext-align: center;font-size: 30px;margin-left: 20px; margin-right: 20px;所有基地nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;成本管理中心需求汇总nbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbspnbsp;%s/h2div classcontainer%s/div/body/html % (time.strftime(%Y-%m-%d, time.localtime()), _h)_to_list [张三henxing.com,姚老五henxing.com,赵二henxing.com,罗八henxing.com]try:SM sendMail.MailMain(XXX服务器(系统需求汇总分析.py),你的邮箱服务器账号,_to_list,f{html_text},f成本管理中心需求汇总)SM.SendMail(text_typehtml)print(邮件发送成功)except BaseException as e:print(f邮件发送失败错误详情:{e})if __name__ __main__:_do DoMain()_do._get_reviewed_info(_site湖南)_do._get_reviewed_info(_site广东)_do._get_reviewed_info(_site泰国台湾)_do._get_reviewed_info(_site全部)_do._get_reviewed_info(_site所有)# _do._send_mail()_do._send_wechat_message()sys.exit()4.自动执行
Windows自动任务计划 1.打开开始菜单搜索任务计划程序单击打开 2.打开任务计划配置主界面后单击创建任务 3.分别按下图配置你的自动任务 常规 触发器 在弹出的编辑窗口配置触发器,完成后单击确定 操作 在弹出的编辑窗口配置操作,完成后单击确定 条件 如图设置条件 设置 如图设置