Files
gloria/README.md
Developer 5d0cafac32 feat: 交接班报告支持 Confluence/Jira 集成,添加 N/A 记录时间归属功能
- 集成 Confluence API 获取船舶报告数据
- 集成 Jira API 查询故障数量
- 支持船号显示 (462#、463# 等)
- 支持故障次数/故障率、人工介入次数/介入率显示
- 跨班作业使用 Card 69 按时间查询效率
- 不跨班作业使用整船效率(剔除异常)
- N/A 记录根据作业时间归属到对应船舶
- 更新 AGENTS.md 和 README.md 文档
- 删除 daily_report_gui.py
2026-03-14 02:52:23 +08:00

190 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Gloria - 福州港日报管理系统
从飞书获取排班信息,从 Metabase 获取船舶作业数据,从 Confluence 获取船舶报告,从 Jira 获取故障信息,生成标准化日报和交接班报告。
## 功能
- **日报生成**: 自动生成每日作业报告
- **班次交接报告**: 分别统计白班/夜班作业情况
- 船号显示 (462#、463# 等)
- 故障次数/故障率
- 人工介入次数/介入率
- 作业效率 (循环/车/小时)
- **Confluence 集成**: 从实船作业统计页面获取船舶数据
- **Jira 集成**: 查询故障单数量
- **GUI 界面**: 基于 Tkinter 的图形界面
- **CLI 支持**: 命令行方式运行
## 项目结构
```
Gloria/
├── daily_report_gui.py # GUI 入口
├── report_generator.py # 日报生成核心
├── shift_report.py # 班次交接报告
├── feishu/ # 飞书 API 集成
├── metabase/ # Metabase 数据查询
├── confluence/ # Confluence API 集成
├── jira_client.py # Jira API 客户端
└── template/ # 报告模板
```
## 快速开始
### 环境要求
- Python 3.10+
- 依赖: `requests`, `python-dotenv`
### 安装
```bash
pip install requests python-dotenv
```
### 配置
创建 `.env` 文件:
```bash
# Metabase
MATEBASE_USERNAME=your_username
MATEBASE_PASSWORD=your_password
# 飞书
FEISHU_APP_ID=your_app_id
FEISHU_APP_SECRET=your_app_secret
FEISHU_SPREADSHEET_TOKEN=your_spreadsheet_token
# Confluence (可选)
CONFLUENCE_URL=https://confluence.westwell-lab.com
CONFLUENCE_TOKEN=your_token
# Jira (可选)
JIRA_URL=https://jira.westwell-lab.com
JIRA_USERNAME=your_username
JIRA_TOKEN=your_token
```
### 运行
```bash
# GUI 模式
python daily_report_gui.py
# 日报 (CLI)
python report_generator.py --date 2026-03-01
# 班次交接报告
python shift_report.py --date 2026-03-01 --shift day
python shift_report.py --date 2026-03-01 --shift night
python shift_report.py --date 2026-03-01 --shift all
```
## 模块使用
### Metabase 数据查询
#### 按时间范围查询作业数据 (time_operations.py)
```bash
# CLI 方式
python metabase/time_operations.py --start 2026-02-01 --end 2026-03-01
python metabase/time_operations.py -s 2026-02-01 -e 2026-03-01
# Python API
from metabase import TimeOperationsClient
client = TimeOperationsClient()
data = client.get_operations_by_time("2026-03-01 08:00:00", "2026-03-01 20:00:00")
# 返回: {'cnt20': 100, 'cnt40': 50, 'teu': 200, ...}
```
**输出字段:**
| 字段 | 说明 |
|------|------|
| cnt20 | 20尺箱量 |
| cnt40 | 40尺箱量 |
| teu | TEU 数 |
| cntAll | 总箱数 |
#### 按船舶查询作业数据 (vessel_operations.py)
```bash
# CLI 方式
python metabase/vessel_operations.py 260301-华晟67
# Python API
from metabase import VesselOperationsClient
client = VesselOperationsClient()
data = client.get_vessel_operations("260301-华晟67")
# 返回: {'cnt20': 44, 'cnt40': 22, 'teu': 88, 'cycle_h_normal': 2.35, ...}
```
**输出字段:**
| 字段 | 说明 |
|------|------|
| cnt20 | 20尺箱量 |
| cnt40 | 40尺箱量 |
| teu | TEU 数 |
| cycle_h_normal | 无人集卡效率 (循环/车/小时) |
| cycle_h_filtered | 无人集卡效率 (剔除异常) |
| start_time | 作业开始时间 |
| end_time | 作业结束时间 |
### 飞书排班查询
```python
from feishu import FeishuScheduleManager
manager = FeishuScheduleManager()
# 获取指定日期排班
schedule = manager.get_schedule_for_date("2026-03-01")
# 返回: {'day_shift': '张三', 'night_shift': '李四', ...}
# 获取今天/明天排班
today = manager.get_schedule_for_today()
tomorrow = manager.get_schedule_for_tomorrow()
```
### Confluence 船舶报告
```python
from confluence import VesselReportManager
manager = VesselReportManager()
# 获取指定日期范围内的报告
reports = manager.get_vessel_reports_in_range("2026-03-01", "2026-03-02")
# 返回包含船号、船名、故障次数、人工介入次数等的报告列表
```
## 班次时间
| 类型 | 时间范围 |
|------|----------|
| 白班 | 08:00 - 20:00 |
| 夜班 | 20:00 - 次日 08:00 |
## N/A 记录处理
Metabase 中可能出现 vesselVisitID 为 "N/A" 的记录(通常是数据同步问题导致)。系统会自动根据作业时间将这些记录归属到对应的船舶:
- 检查 N/A 记录的时间范围
- 与其他船舶的时间范围进行重叠判断
- 将 N/A 记录的 TEU 合并到时间重叠的船舶
## 注意事项
- 程序需在 **8:00 后运行**,确保最后一条船指令结束时间超过 8 点
- 飞书 Token 自动刷新,提前 30 分钟续期
- Metabase 无原生 Python SDK使用 REST API
- Confluence 和 Jira 需要配置相应 Token 才能启用完整功能
## License
MIT