简称:dtalk_push+pas
目前,打算把这个功能集成到WEB系统中,脚本化暂停更新,有问题请联系我!
基于Python语言研发,调用DingTalk(钉钉)Robot OpenApi实现钉钉机器人自动化推动绩效工资明细到钉钉用户。 目前,程序处于v1.0.1版本研发阶段,具体功能如下:
- Robot自动化推送DingTalk消息
- 日志记录(初次运行项目会自动创建log目录以及.log文件)
- 参数配置
- 模板配置(DingTalk User ID、消息体)
v1.1.X预研发功能:
- fix v1.0.0 bug
- 分成开发者配置文件以及客户配置文件,便于后续封装exe文件
- 优化参数配置,预加入DingTalk消息体配置
- 打包制作.exe文件或者一键式部署(具体部署方式以发布版本功能为准)
- 添加消息撤回功能
- 开发语言:Python3.7
- 研发工具:Pycharm CE
程序可运行于Linux、Windows、MacOS等不同系统上,git clone之后进行修改配置,可在此基础上可进行二次开发。
程序中的配置信息提取到root目录下config.yaml配置文件,将运行代码封装core核心目录中,对外只暴露程序入口,有兴趣或者想了解源码的依据目录说明进行源代码查看。
- core
程序的核心运行代码:- run 程序运行的逻辑代码
- base_class 单例模式
- config 配置解析
- ding_api 钉钉Robot openApi的封装
- excel_lib Excel操作类
- logger 程序日志
- status Method Response json封装类
- utils 通用静态方法
- log
日志存放目录,git clone之后,初次运行会自动创建log目录,以config.yaml配置为准,名称采用FILENAME_PREFIX + YY-mm-dd.log命名,具体配置请参考config.yaml中的LOG,不建议更改。 - package
dingtalk.zip:DingTalk openApi离线包
官方下载地址:https://developers.dingtalk.com/document/resourcedownload/download-server-sdk/title-12y-g4g-zn2?pnamespace=robots
建议使用官网的新版服务端SDK,除了Python SDK还有Java、C#、GO、PHP等,当前主流的开发语言SDK包都提供了。 - qtdesc
存放其他自定义项目相关描述文件。 - template
存放DingTalk模板配置文件,目前程序只支持.xls格式的模板,文件中包含推送消息的用户以及内容,具体template配置相关请查下下个章节配置说明,模板格式如下:
USER_ID | HYLBDH | 统计日期 | 机构名称 | 行员代号 | 行员名称 | 行员类别 | 行员岗位 | 工资项1 | 工资项2 | 工资项N | 实发绩效工资 |
---|---|---|---|---|---|---|---|---|---|---|---|
032511245938821831 | E01 | 20210930 | 测试部 | 100001 | mingliang.gao1 | 支行行长 | 支行行长 | 100 | 500 | -80 | 520 |
manager2730 | E02 | 20210930 | 研发部 | 100002 | mingliang.gao2 | 支行行长 | 支行行长 | 100 | 500 | -80 | 520 |
- main.py
程序入口 - config.yaml
配置文件 - requirements.txt
程序包版本
-
SERVER:项目基础信息配置(不建议更改)
- NAME:程序名称
- VERSION:版本信息
- DEBUG:是否采用Debug模式运行,值有True与False,默认值为True开启Debug模式,处于Debug模式的程序会打印log,建议开启
- IS_TEST:程序开发调试阶段使用,获取模板数据DingTalk use id是否唯一,如果参数为False模板有重复的ID会报error,否则True则会通过,默认设置为False即可
-
DEV:开发者选项配置(不建议更改)
- DK_INTERVAL:用户调用DingTalk发消息用户之间是否有间隔时间,默认为1.2,如果参数值>0,则会产生一个0.1~参数值之间的随机间隔,如果设置为0则无间隔
-
DINGTALK:DingTalk Robot openApi服务端URL设置(不可以更改)
防止DingTalk官网服务端变更地址时使用,接口为ali openApi,变更的可能性极小。- BASE_URL:DingTalk服务API根地址
- TOKEN_URL:获取access token地址,DingTalk所有的OpenApi操作均需要认证,access token是二次对接的第一步
-
ROBOT:DingTalk Robot配置信息(必须更改)
- APPKEY:机器人AppKey
- APPSECRET:机器人AppSecret
设置钉钉后台创建的企业内部机器人相关配置,具体创建机器人操作见:http://pygo2.top/articles/32206/
-
LOG:日志信息的配置(不建议更改)
- LOG_DIR:日志信息的存放目录,配置值为相对路径,基于项目root根目录下设置,配置好目录程序会自动进行创建
- LOG_LEVEL:打印日志级别,有5个级别,默认为debug
logger.debug('message') logger.info('message') logger.warning('message') logger.error('message') logger.critical('message')
- LOG_FORMATTER:打印日志格式,具体格式设置请参照core/logger.py文件操作说明
%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s - %(message)s
- LOG_FILENAME_PREFIX:日志文件名称的prefix
-
Template:表格模板配置(不建议更改)
包含FILE、SHEET_INDEX、SHEET_INDEX and so on,具体说明如下:- FILE:模板文件名称,目前只支持在template目录存放模板文件,建议文件名称为英文,只支持.xls格式文件
- IS_TITLE:模板文件是否包含表头,默认设置为True包含表头,并且为第一行,如果不提供表头,消息只有数字部分
- SHEET_INDEX:读取的模板文件sheet索引值,从1,2,3开始算,默认读取第一个
- COL_INDEX_DINGTALK_ID:设置DingTalk中员工导出文件中的USER_ID,系统会依据此ID对DingTalk人员进行消息推送, 根据项目实际情况以及模板进行配置,默认为第一列
- COL_INDEX_HYLB:配置模板文件DingTalk人员的行员类别列,默认为第二列,程序会匹配此参数与MESSAGE_COL配置参数,依据行员类别进行不同消息体(工资项)的内容推送
模板特别说明: 1、模板文件暂不支持其他目录,只允许在template目录,建议英文命名,并且只支持.xls格式文件 2、模板文件需要提供表头,并且在第一行 3、其中,USER_ID不可以为空,如果为空则对此行数据自动过滤不推送消息 DingTalk User ID获取参考:http://pygo2.top/articles/45420/
-
MANAGE:DingTalk消息控制配置(不建议更改)
- TITLE:设置消息体标题,可选项设置,默认为YYYY-MM月薪资明细,其中YYYY-MM为当前时间的年-月
- IS_ADD_IMAGE:推送的消息体是否添加图片显示,默认为空不显示,有需要显示图片的添加图片公网URL地址
- CONTROL:控制不推送DingTalk消息的人员ID,此ID为DingTalk后台导出的User ID,格式为列表,用英文单引号/双引号括起来,多个用英文逗号分割
-
MESSAGE_COL:DingTalk推送消息体配置(必须更改)
配置采用key: value格式,如果不进行配置删除配置值,程序会对每一个用户发送所属行数据的全部模板内容,示例:E01: [3, 4, 5, 6, 7, 8, 9, 28, 31, 26]- key:E01代表用户的类别代号,对应模板文件中的第二列HYLBDH
- value:[]代表工资项,需要配置用户推送哪些工资项,需要提供模板文件对应的列数(从1,2,3开始),如果为空,则发送全部工资项内容
这部分介绍项目的环境搭建、运行,帮助开发者把项目跑起来,具体的测试部分需要用户自行创建测试数据进行测试。
项目是用Python语言开发,而且需要在有网的PC/服务器上进行环境搭建,除了在安装包的时候可以实现一键式包安装,主要原因在于程序调用了DingTalk Robot OpenApi,需要联网把数据推送给ali服务。
第一要素:网络
-
Pyhton环境
Python官网下载地址:https://www.python.org/downloads/
依据系统进行版本下载,建议下载安装Python3.7或者以上的版本,本程序是基于3.7进行开发。
安装没什么特别说明的,安装完之后记得把Python加入到系统Path。 -
git项目
git clone [email protected]:GIS90/dtalk_push_pas.git 或者 git clone https://github.com/GIS90/dtalk_push_pas.git
如果出现git命令找不到情况,baidu自行安装git命令。
-
包安装
Python安装完之后,会自动安装pip包管理工具,对包进行管理、安装、卸载等操作。
对于初学者不需要进行pip源配置,毕竟默认源下载时候需要fanqiang,很慢,后期熟悉Python之后再进行更改源更改,自行baidu一下,本程序的具体包安装见下一主题包说明,先讲述包安装:cd dtalk_push_pas pip install -r requirements.txt
第一句命令:控制台进入到项目root目录
第二句命令:批量包安装 -
Pycharm CE安装
Pycharm是编写Python代码的IDE,跟IDEA、WebStorm等都是jetbrains生成的,虽然各种IDE国内都有破解版的,但是对于Pycharm还是比较友好的的,因为有社区版本,虽然功能不如专业版,但是free啊,白嫖不香吗,哈哈哈。
安装Pycharm部分略,安装完之后需要配置一下IDE使用的Python,选择刚安装的就行,具体安装、配置请自行baidu,不明白的也可以留言、发邮件。 -
配置更改
安装完Python与git clone项目之后,需要对项目root根目录下的config.yaml进行配置,主要配置内容:- ROBOT:配置机器人的APPKEY、APPSECRET,具体怎么创建、查看机器人在上面或者README.md末尾有相关链接说明
- MESSAGE_COL:需要配置所属的行员类别与对应的工资项(消息内容),格式:key: [列1, 列2, 列3..., 列n]
- MANAGE:关于消息题是否显示图片以及钉钉不发送用户控制列表
其他配置不建议更改,具体配置相关的说明请自行查阅配置说明章节,
消息TITLE标题根据发送的绩效明细定制,默认的适合通用情况
-
配置模板
- 模板文件建议英文命名,必须包含表头,并且表头在模板第一行(表头建议用中文)
- 模板文件内容第一列是DingTalk(钉钉)导出的User ID,具体怎么导出员工User ID同样上面有链接,README.md末尾也有
- 模板文件内容第二列定义的是自定义的行员消息类别,是配置文件中配置的MESSAGE_COL,用法请参考配置文件
- 其他列内容就是PAS绩效系统导出的其他相关展示信息,行员代号、机构名称、工资项1、工资项2、工资项N、合计,需要展示什么内容在MESSAGE_COL进行配置
-
运行
完成上述1-5操作之后,在Pycharm中进行启动,打开root目录下的main.py文件,右键 > Run 'main.py', 也可以使用快捷键:ctrl+shift+R。
执行下列pip命令进行一键式包安装。
pip install -r requirements.txt
其中requirements.txt为项目运行所需要的包,已固定版本,重要包简要说明:
- alibabacloud-credentials、 alibabacloud-dingtalk、alibabacloud-endpoint-util、alibabacloud-openapi-util、alibabacloud-tea、alibabacloud-tea-openapi、alibabacloud-tea-util:DingTalk Robot OpenApi服务,ali提供的SDK
- PyYAML:yaml格式配置文件解析
- requests:Http协议请求
- xlrd:Excel的读操作
DingTalk Robot OpenApi SDK离线安装:
- 解压package目录下的dingtalk.zip
- 进入到解压目录
- 打开控制台(Windows:cmd,Macos:item2,Linux:terminal)
- 执行:python setup.py install
- 安装完之后,pip list查看
pip常用命令:
# 安装(最新版)
pip install xxx
# 安装(具体版本)
pip install xxx==1.0
# 批量安装
pip install -r requirements.txt
# 卸载
pip uninstall xxx
# 列表
pip list/freeze
建议注册一个企业单位钉钉,随便先创建一个单位即可,添加一些测试人员。
Now, start your test
- Python下载:https://www.python.org/downloads/
- Pycharm CE下载地址:https://www.jetbrains.com/pycharm/download/#section=windows
- MarkDown官网语法:http://markdown.p2hp.com/basic-syntax/
- DingTalk开放平台:https://open.dingtalk.com/
- 官网发消息格式:https://open.dingtalk.com/document/robots/message-types-and-data-format
- 官网发消息API:https://open.dingtalk.com/document/robots/chatbots-send-one-on-one-chat-messages-in-batches
- DingTalk机器人SDK包:https://developers.dingtalk.com/document/resourcedownload/download-server-sdk/title-12y-g4g-zn2?pnamespace=robots
- DingTalk Robot创建与权限开通:http://pygo2.top/articles/32206/
- DingTalk User ID获取参考:http://pygo2.top/articles/45420/
- Lifetime Free VPN:VPN(神器)
- JSON Viewer:JSON数据格式化
- 沙拉查词:划词
- Extension Manager:扩展管理器
- Vue.js devtools:VUE
安装插件需要连接VPN,如果没有VPN,推荐大家使用
fotiaoqiang:https://www.jiayouyashanghai.com/cn/?a=dnxe2
安装完上述插件之后再进行卸载
- Github: https://github.com/GIS90
- Email: [email protected]
- Blog: http://pygo2.top
- WeChat: PyGo90
Enjoy the good life everyday!!!
Life is short, I use python.