Files
junhong_cmp_fiber/READEME.md

125 lines
3.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.
# 君鸿卡管系统
## 系统简介
物联网卡 + 号卡全生命周期管理平台,支持代理商体系和分佣结算。
**技术栈**Fiber + GORM + Viper + Zap + Lumberjack.v2 + Validator + sonic JSON + Asynq + PostgreSQL
**核心功能**
- 物联网卡/号卡生命周期管理(开卡、激活、停机、复机、销户)
- 代理商层级管理和分佣结算
- 批量状态同步(卡状态、实名状态、流量使用情况)
- 与外部 Gateway 服务通过 RESTful API 交互
---
## 项目结构
```
junhong_cmp_fiber/
├── cmd/ # 应用程序入口
│ ├── api/ # HTTP API 服务
│ └── worker/ # Asynq 异步任务 Worker
├── internal/ # 私有业务代码
│ ├── handler/ # HTTP 处理层
│ │ └── middleware/ # 中间件(认证、日志、恢复、验证)
│ ├── service/ # 业务逻辑层(核心业务)
│ ├── store/ # 数据访问层
│ │ └── postgres/ # PostgreSQL 实现
│ ├── model/ # 数据模型实体、DTO
│ ├── task/ # Asynq 任务定义和处理
│ ├── gateway/ # Gateway 服务 HTTP 客户端
│ └── router/ # 路由注册
├── pkg/ # 公共工具库
│ ├── config/ # 配置管理Viper
│ ├── logger/ # 日志Zap + Lumberjack
│ ├── database/ # 数据库初始化PostgreSQL + Redis
│ ├── queue/ # 队列封装Asynq
│ ├── response/ # 统一响应格式
│ ├── errors/ # 错误码定义
│ └── validator/ # 验证器封装
├── config/ # 配置文件yaml
├── migrations/ # 数据库迁移文件
├── scripts/ # 脚本工具
└── docs/ # 文档
```
---
## 架构设计
### 分层架构
```
Handler (HTTP) → Service (业务逻辑) → Store (数据访问) → Model (数据模型)
```
### 双服务架构
- **API 服务**:处理 HTTP 请求,快速响应
- **Worker 服务**:处理异步任务(批量同步、分佣计算等),独立部署
### 核心模块
- **Service 层**:统一管理所有业务逻辑,支持跨模块调用
- **Store 层**:统一管理所有数据访问,支持事务
- **Task 层**Asynq 任务处理器,支持定时任务和事件触发
---
## 开发规范
### 依赖注入
通过 `Service``Store` 结构体统一管理依赖:
```go
// 初始化
st := store.New(db)
svc := service.New(st, queueClient, logger)
// 使用
svc.SIM.Activate(...)
svc.Commission.Calculate(...)
```
### 事务处理
```go
store.Transaction(ctx, func(tx *store.Store) error {
tx.SIM.UpdateStatus(...)
tx.Commission.Create(...)
return nil
})
```
### 异步任务
- 高频任务:批量状态同步、流量同步、实名检查
- 业务任务:分佣计算、生命周期变更通知
- 任务优先级critical > default > low
---
## 快速开始
### 配置
编辑 `config/config.yaml` 配置数据库和 Redis 连接
### 启动 API 服务
```bash
go run cmd/api/main.go
```
### 启动 Worker 服务
```bash
go run cmd/worker/main.go
```
---
## 设计原则
- **简单实用**:不过度设计,够用就好
- **直接实现**:避免不必要的接口抽象
- **统一管理**:依赖集中初始化,避免参数传递
- **职责分离**API 和 Worker 独立部署,便于扩展