Skip to content

behappy-project/behappy-delivery-order-guard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

外卖聚合打印与超时预警系统 (Delivery Order Guard)

一个基于 Golang 开发的外卖订单聚合、打印和超时监控系统。该系统可以同时监听多个外卖平台(美团、饿了么)的订单,统一处理后厨打印,并实时监控订单超时情况。

🎯 项目特点

  • 并发处理:使用 Goroutine 和 Channel 实现高效的并发订单处理
  • 统一格式:将不同平台的订单格式统一转换为标准结构
  • 智能队列:使用 Worker Pool 模式控制打印并发数,防止系统过载
  • 实时监控:自动检测订单超时并发送报警
  • 高性能日志:使用 Zap 进行结构化日志记录
  • 配置灵活:使用 Viper 支持 YAML 配置文件
  • 数据持久化:使用 Redis 存储订单状态

🏗️ 系统架构

系统包含三个核心模块:

1. 订单接收器 (Order Ingestion)

  • 模拟从不同外卖平台(美团、饿了么)接收订单
  • 使用 Channel 汇总所有订单
  • 将不同平台的 JSON 格式转换为统一的 Order 结构体
  • 技术点:struct 标签、json.Unmarshal、Goroutine

2. 智能打印队列 (Worker Pool)

  • 使用协程池限制并发数,防止瞬间订单量过大
  • 模拟将订单发送到后厨打印机
  • 将订单状态保存到 Redis
  • 技术点:sync.WaitGroup、buffered channels、Worker Pool 模式

3. 超时监控报警 (Timeout Watcher)

  • 定期检查所有订单状态
  • 如果订单在 15 分钟内没有被接单或出餐,自动发送报警
  • 技术点:time.Ticker、context.WithTimeout

📦 技术栈

  • 语言:Golang 1.24+
  • 日志:Zap(高性能结构化日志)
  • 配置:Viper(支持 YAML/JSON)
  • 存储:Redis(订单状态存储)
  • 并发:Goroutine + Channel

🚀 快速开始

前置要求

  • Go 1.24 或更高版本
  • Redis 服务器(用于存储订单状态)

安装依赖

go mod download

配置 Redis

确保 Redis 服务正在运行:

# 使用 Docker 启动 Redis(可选)
docker run -d -p 6379:6379 redis:latest

配置文件

复制并编辑 config.yaml

environment: development
log_level: info
order_channel_buffer: 100
printer_workers: 5
order_timeout: 15m

redis:
  addr: localhost:6379
  password: ""
  db: 0

platforms:
  - name: meituan
    enabled: true
    interval: 10
  - name: eleme
    enabled: true
    interval: 15

运行系统

go run main.go

系统启动后会:

  1. 开始从配置的平台接收模拟订单
  2. 将订单放入打印队列处理
  3. 监控订单超时情况

📁 项目结构

behappy-delivery-order-guard/
├── main.go                 # 程序入口
├── config.yaml             # 配置文件
├── go.mod                  # Go 模块定义
├── internal/
│   ├── config/            # 配置管理
│   │   └── config.go
│   ├── ingestion/         # 订单接收器
│   │   ├── ingester.go
│   │   └── order.go
│   ├── printer/           # 打印队列
│   │   └── printer.go
│   └── watcher/           # 超时监控
│       └── watcher.go
└── README.md

🔧 配置说明

配置项 说明 默认值
environment 运行环境 development
log_level 日志级别 info
order_channel_buffer 订单通道缓冲区大小 100
printer_workers 打印工作协程数 5
order_timeout 订单超时时间 15m
redis.addr Redis 地址 localhost:6379
platforms[].enabled 是否启用平台 true
platforms[].interval 订单接收间隔(秒) 10

📊 订单状态

  • pending:待处理(已打印,等待接单)
  • accepted:已接单
  • preparing:制作中
  • ready:已出餐
  • timeout:超时

🔍 监控与报警

系统会定期检查所有订单状态,如果订单在配置的超时时间内(默认 15 分钟)没有被接单或出餐,会:

  1. 记录警告日志
  2. 更新订单状态为 timeout
  3. 输出报警信息(可扩展为发送到钉钉、企业微信、邮件等)

报警信息示例:

⚠️ 订单超时报警
订单ID: MT1234567890
订单号: MT12345678
平台: meituan
客户: 张先生 (13800138000)
金额: ¥52.00
已等待: 15m30s
超时阈值: 15m0s
请及时处理!

🎓 学习要点

这个项目涵盖了以下 Golang 核心概念:

  1. 并发编程

    • Goroutine 的使用
    • Channel 的通信
    • sync.WaitGroup 的同步
  2. 数据结构

    • struct 标签的使用
    • JSON 序列化/反序列化
  3. 设计模式

    • Worker Pool 模式
    • 生产者-消费者模式
  4. 标准库

    • context 包的使用
    • time 包的时间处理
    • encoding/json 的 JSON 处理
  5. 第三方库

    • Zap 日志库
    • Viper 配置库
    • Redis 客户端

🔮 扩展方向

  • 集成真实的打印机 API
  • 添加 Prometheus 监控指标
  • 实现钉钉/企业微信报警
  • 添加订单状态更新 API
  • 支持更多外卖平台
  • 添加数据库持久化
  • 实现订单统计和报表

📝 License

MIT License

🤝 贡献

欢迎提交 Issue 和 Pull Request!

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors