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

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

安装

pip install requests python-dotenv

配置

创建 .env 文件:

# 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

运行

# 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)

# 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)

# 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 作业结束时间

飞书排班查询

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 船舶报告

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

Description
福州港日报管理系统
Readme 99 KiB
Languages
Python 100%