TripSync 是一个基于 Streamlit 开发的轻量级差旅排期辅助工具。它可以帮助团队管理者快速、公平地分配团队成员的差旅任务,并自动处理中国大陆复杂的法定节假日及调休安排。
- 智能工作日计算:内置
chinese_calendar库,自动获取国家法定节假日数据,精准排除假期与正常周末,并自动包含周末的法定调休工作日。 - 自定义排期需求:支持添加自定义员工名单,并为每个人设置当季度的目标出差次数。
- 黑名单日期过滤:提供直观的按月分页日历界面,支持“一键全选”当月,方便员工或管理员快速勾选“无法出差”的日期。
- 公平分配算法:尽可能保证两人同行,且优先安排连续两天的差旅;自动将剩余单次需求进行合理补位。
- 一键导出:一键生成最终排期表,并支持导出为
.csv文件,方便后续与其他系统对接或打印。
本项目主要依赖以下核心 Python 库:
streamlit: 用于构建 Web 交互界面pandas: 用于数据处理与表格展示chinesecalendar: 用于判断中国大陆的法定节假日与调休
完整的依赖列表请参考 requirements.txt。
-
克隆项目或进入目录
cd TripSync -
安装依赖 建议使用虚拟环境(如
.venv)。pip install -r requirements.txt
-
运行程序
streamlit run app.py
运行后,浏览器会自动打开
http://localhost:8501进入系统界面。
- 设置季度:在左侧边栏选择目标年份和季度。系统会自动验证该年份的节假日数据是否就绪(国务院通常在每年底发布下一年的节假日安排)。
- 添加人员:在主界面输入员工姓名、预定出差次数。
- 勾选无法出差的日期:在右侧的日期选择表格中,按月份快速勾选该员工无法出差的日期。支持一键全选当月功能。
- 生成排期:添加完所有人员后,点击“生成排期表”按钮。
- 下载结果:查看界面下方生成的排期统计及明细,点击“下载表格”保存 CSV 文件。
TripSync/
├── app.py # 核心业务逻辑及 Streamlit 界面代码
├── pyproject.toml # 项目配置文件
├── requirements.txt # Python 依赖包列表
├── uv.lock # UV 包管理器锁定文件
└── README.md # 项目说明文档
- 节假日数据更新:如果发现选择新一年(例如刚跨年时)提示“节假日数据缺失”,说明
chinesecalendar尚未更新该年度数据。请等待库更新并执行pip install --upgrade chinesecalendar即可。 - 排期算法:算法使用贪心加随机策略,若约束条件过于严苛(如所有人都将大量日期设为黑名单),可能会导致排期失败或无法完全达到目标次数。
Built with ❤️ using Streamlit & Python.