# OrbitIn - 码头作业日志管理系统 从 Confluence API 获取交接班日志,提取作业数据并生成统计报表。 ## 功能特性 - 从 Confluence 获取交接班日志 HTML - 提取保留布局的文本内容 - SQLite3 数据库存储 - 生成日报和月度统计 - 支持未统计数据手动录入 - 支持二次靠泊记录合并 - GUI 图形界面(可选) - 飞书排班表集成(自动获取班次人员) ## 项目结构 ``` OrbitIn/ ├── main.py # CLI 入口 ├── README.md # 项目说明 ├── AGENTS.md # AI助手开发文档 ├── .env # 环境配置(敏感信息) ├── .env.example # 环境配置示例 ├── layout_output.txt # 缓存的布局文本 ├── debug/ # 调试输出目录 │ └── layout_output_*.txt # 带时间戳的调试文件 ├── data/ # 数据目录 │ ├── daily_logs.db # SQLite3 数据库 │ └── schedule_cache.json # 排班数据缓存 ├── logs/ # 日志目录 │ └── app.log # 应用日志 └── src/ # 代码模块 ├── __init__.py ├── config.py # 统一配置管理 ├── logging_config.py # 统一日志配置 ├── report.py # 报表生成器 ├── gui.py # GUI 图形界面 ├── database/ # 数据库模块 │ ├── base.py # 数据库基类 │ ├── daily_logs.py # 每日日志数据库 │ └── schedules.py # 排班数据库 ├── confluence/ # Confluence API 模块 │ ├── client.py # Confluence API 客户端 │ ├── parser.py # HTML 内容解析器 │ ├── text.py # HTML 文本提取器 │ ├── log_parser.py # 日志解析器 │ ├── manager.py # 内容管理器 │ └── __init__.py # 模块导出 └── feishu/ # 飞书 API 模块 ├── client.py # 飞书 API 客户端 ├── parser.py # 排班数据解析器 ├── manager.py # 飞书排班管理器 └── __init__.py # 模块导出 ``` ## 快速开始 ### 安装依赖 ```bash pip install requests beautifulsoup4 python-dotenv ``` ### 配置 在 `.env` 文件中配置: ```bash # .env # Confluence 配置 CONFLUENCE_BASE_URL=https://your-confluence.atlassian.net/rest/api CONFLUENCE_TOKEN=your-api-token CONFLUENCE_CONTENT_ID=155764524 # 飞书表格配置(用于获取排班人员信息) FEISHU_BASE_URL=https://open.feishu.cn/open-apis/sheets/v3 FEISHU_TOKEN=your-feishu-api-token FEISHU_SPREADSHEET_TOKEN=EgNPssi2ghZ7BLtGiTxcIBUmnVh # 数据库配置 DATABASE_PATH=data/daily_logs.db # 业务配置 DAILY_TARGET_TEU=300 # 每日目标TEU数量,用于计算完成率 DUTY_PHONE=13107662315 # 值班电话,显示在日报中 SEPARATOR_CHAR=─ # 分隔线字符,用于格式化输出 SEPARATOR_LENGTH=50 # 分隔线长度 SCHEDULE_REFRESH_DAYS=30 # 排班数据刷新间隔(天) ``` 参考 `.env.example` 文件创建 `.env` 文件。 ### 使用方法 #### 命令行方式 ```bash # 默认:获取、提取、解析并保存到数据库 python3 main.py fetch-save # 仅获取HTML并提取文本(保存到debug目录) python3 main.py fetch # 获取并保存带时间戳的debug文件 python3 main.py fetch-debug # 生成日报(指定日期) python3 main.py report 2025-12-28 # 生成今日日报 python3 main.py report-today # 配置测试(验证所有连接) python3 main.py config-test # 添加未统计数据 python3 main.py --unaccounted 118 --month 2025-12 # 显示帮助 python3 main.py --help ``` #### GUI 方式 ```bash python3 src/gui.py ``` GUI 功能: - 获取并处理数据 - 获取 (Debug模式) - 生成日报 - 今日日报(自动获取前一天数据) - 添加未统计数据 - 数据库统计(显示当月每艘船的作业量) - 日报内容可复制 - 自动刷新排班信息 ## 数据格式 ### 日报表 (daily_handover_logs) | 字段 | 类型 | 说明 | |------|------|------| | id | INTEGER | 主键 | | date | TEXT | 日期 YYYY-MM-DD | | shift | TEXT | 班次 (白班/夜班) | | ship_name | TEXT | 船名(不含船号前缀) | | teu | INTEGER | 作业量 TEU | | efficiency | REAL | 效率 | | vehicles | INTEGER | 上场车辆数 | | created_at | TEXT | 创建时间 | ### 未统计表 (monthly_unaccounted) | 字段 | 类型 | 说明 | |------|------|------| | id | INTEGER | 主键 | | year_month | TEXT | 年月 YYYY-MM | | teu | INTEGER | 未统计的 TEU | | note | TEXT | 备注 | | created_at | TEXT | 创建时间 | ## 特性说明 ### 二次靠泊合并 解析时会自动合并同一天的二次靠泊记录: - 夜班 学友洋山: 273TEU - 夜班 学友洋山(二次靠泊): 14TEU - 合并后: 夜班 学友洋山: 287TEU ### 未统计数据 可以在数据库统计中查看当月每艘船的作业量总计,便于跟踪船舶运营情况。 ## 示例输出 ``` 日期:12/28 船名:学友洋山 作业量:246TEU 当日实际作业量:246TEU 当月计划作业量:8400TEU (用天数*300TEU) 当月实际作业量:12632TEU 当月完成比例:150.38% 12/29 白班人员: 12/29 夜班人员: 24小时值班手机:13107662315 ``` ## 核心模块说明 ### Confluence 模块 (`src/confluence/`) - **`client.py`** - Confluence API 客户端,负责 HTTP 请求和连接管理 - **`text.py`** - HTML 文本提取器,保留布局结构 - **`log_parser.py`** - 日志解析器,解析船次作业数据 - **`parser.py`** - HTML 内容解析器,提取链接、图片、表格 - **`manager.py`** - 内容管理器,提供高级内容管理功能 ### 飞书模块 (`src/feishu/`) - **`client.py`** - 飞书 API 客户端 - **`parser.py`** - 排班数据解析器 - **`manager.py`** - 飞书排班管理器,缓存和刷新排班信息 ### 数据库模块 (`src/database/`) - **`base.py`** - 数据库基类,提供统一的连接管理 - **`daily_logs.py`** - 每日交接班日志数据库 - **`schedules.py`** - 排班数据库 ## 技术栈 - Python 3.7+ - SQLite3 - Requests (HTTP 客户端) - BeautifulSoup4 (HTML 解析) - tkinter (GUI,可选) - 类型提示 (Python 3.5+) ## 架构特点 1. **模块化设计** - 每个模块职责单一,便于测试和维护 2. **统一配置** - 集中管理所有环境变量和业务配置 3. **统一日志** - 标准化的日志配置和文件轮转 4. **异常处理** - 详细的错误处理和日志记录 5. **类型安全** - 全面的 Python 类型提示 ## 开发指南 ### 添加新功能 1. **配置管理**: 所有配置项应在 `src/config.py` 中定义 2. **日志记录**: 使用 `from src.logging_config import get_logger` 获取日志器 3. **异常处理**: 为每个模块创建自定义异常类 4. **类型提示**: 所有函数和方法都应包含完整的类型提示 5. **数据库操作**: 使用 `src/database/base.py` 中的基类确保连接管理 ### 测试 ```bash # 运行配置测试 python3 main.py config-test # 测试特定功能 python3 main.py fetch python3 main.py report-today ``` ### 调试 1. **日志查看**: 查看 `logs/app.log` 获取详细运行信息 2. **调试文件**: 使用 `python3 main.py fetch-debug` 生成带时间戳的调试文件 ### 代码规范 - 遵循 PEP 8 编码规范 - 使用 Black 格式化代码(可选) - 使用 isort 排序导入 - 所有公开 API 应有文档字符串 ## 故障排除 ### 常见问题 1. **连接失败**: 检查 `.env` 文件中的 API 令牌和 URL 2. **数据库错误**: 确保 `data/` 目录存在且有写入权限 3. **解析错误**: 检查 Confluence 页面结构是否发生变化 4. **飞书数据获取失败**: 验证飞书表格权限和 token 有效性 ### 日志级别 - 默认日志级别: INFO - 调试日志级别: DEBUG (设置环境变量 `LOG_LEVEL=DEBUG`) - 日志文件: `logs/app.log`,自动轮转 ## License MIT