# 云印享 - 付费打印服务系统 ## 项目简介 云印享是一个基于 gRPC 的付费打印服务后端系统,支持用户管理、文件上传下载、订单处理、打印任务调度、微信支付、文库管理等核心功能。 ## 技术栈 - **语言**: Go 1.21+ - **框架**: gRPC + Protobuf - **数据库**: MySQL + GORM - **认证**: JWT (JSON Web Token) - **支付**: 微信支付 (gopay) - **配置**: Viper ## 项目结构 ``` cloudprint-backend/ ├── cmd/server/ # 应用入口 │ └── main.go ├── config/ # 配置管理 │ └── config.go ├── internal/ │ ├── grpc/ # gRPC 服务层 │ │ ├── interceptor/ # 拦截器 (认证) │ │ └── service/ # gRPC 服务实现 │ ├── model/ # 数据模型 │ ├── repository/ # 数据访问层 │ └── service/ # 业务逻辑层 ├── pkg/ # 公共工具包 │ ├── jwt/ # JWT 认证 │ ├── pay/ # 微信支付 │ └── upload/ # 文件上传 ├── proto/ # Protobuf 定义 │ ├── cloudprint.proto │ └── generated/ # 生成的代码 ├── scripts/ # 数据库脚本 │ └── db.sql ├── config.yaml # 配置文件 ├── go.mod └── go.sum ``` ## 服务列表 | 服务 | 端口 | 描述 | |------|------|------| | gRPC Server | 8080 | 主服务端口 | ## 快速开始 ### 1. 环境要求 - Go 1.21+ - MySQL 5.7+ - protoc (Protocol Buffer 编译器) ### 2. 数据库初始化 ```bash mysql -u root -p < scripts/db.sql ``` ### 3. 配置修改 编辑 `config.yaml` 文件,修改以下配置: ```yaml database: host: "localhost" port: 3306 username: "root" password: "your-password" database: "cloudprint" jwt: secret: "your-secret-key-change-in-production" wechat: app_id: "your-app-id" app_secret: "your-app-secret" mch_id: "your-merchant-id" api_key: "your-api-key" notify_url: "http://your-domain.com/pay/callback" ``` ### 4. 编译生成 gRPC 代码 ```bash cd cloudprint-backend protoc --go_out=./proto/generated --go_opt=paths=source_relative \ --go-grpc_out=./proto/generated --go-grpc_opt=paths=source_relative \ proto/cloudprint.proto ``` ### 5. 运行服务 ```bash go run cmd/server/main.go -config config.yaml ``` ## API 文档 ### AuthService (用户认证服务) | 方法 | 描述 | |------|------| | Login | 微信登录,获取 AccessToken 和 RefreshToken | | RefreshToken | 刷新 AccessToken | | GetUserInfo | 获取用户信息 | | UpdateUser | 更新用户信息(昵称、头像) | ### FileService (文件管理服务) | 方法 | 描述 | |------|------| | Upload | 流式上传文件(支持分片) | | GetFile | 流式下载文件 | | DeleteFile | 删除文件 | | AddWatermark | 添加水印 | | GetFileList | 获取文件列表 | ### OrderService (订单服务) | 方法 | 描述 | |------|------| | CreateOrder | 创建订单 | | GetOrder | 获取订单详情 | | GetOrderList | 获取订单列表 | | UpdateOrderStatus | 更新订单状态 | | CancelOrder | 取消订单 | ### PrintService (打印服务) | 方法 | 描述 | |------|------| | GetPrinters | 获取打印机列表 | | GetPrinterStatus | 获取打印机状态 | | RegisterPrinter | 注册打印机 | | PrinterHeartbeat | 打印机心跳 | | SubmitPrintJob | 提交打印任务 | | CancelPrintJob | 取消打印任务 | | SubscribeJobs | 订阅打印任务(流式) | | ReportJobStatus | 上报任务状态 | ### LibraryService (文库服务) | 方法 | 描述 | |------|------| | GetCategories | 获取文库分类 | | GetFiles | 获取文库文件列表 | | UploadFile | 上传文库文件 | | DeleteFile | 删除文库文件 | ### PriceService (价目表服务) | 方法 | 描述 | |------|------| | GetPriceList | 获取价目表 | | CreatePriceItem | 创建价目项 | | UpdatePriceItem | 更新价目项 | ### PayService (支付服务) | 方法 | 描述 | |------|------| | CreateWxPayOrder | 创建微信支付订单 | | QueryPayStatus | 查询支付状态 | | HandlePayCallback | 处理支付回调 | | PayByBalance | 余额支付 | ### AdminService (管理后台服务) | 方法 | 描述 | |------|------| | Login | 管理员登录 | | GetStatistics | 获取统计数据 | ## 数据模型 ### 订单状态 | 值 | 状态 | |----|------| | 0 | 待支付 | | 1 | 已支付 | | 2 | 打印中 | | 3 | 已完成 | | 4 | 已取消 | ### 支付状态 | 值 | 状态 | |----|------| | 0 | 待支付 | | 1 | 支付中 | | 2 | 成功 | | 3 | 失败 | ### 打印机状态 | 值 | 状态 | |----|------| | 0 | 空闲 | | 1 | 打印中 | | 2 | 离线 | ### 打印任务状态 | 值 | 状态 | |----|------| | pending | 等待中 | | printing | 打印中 | | completed | 已完成 | | failed | 失败 | | cancelled | 已取消 | ## 默认账号 - 管理员用户名: `admin` - 管理员密码: `admin123` (需在生产环境修改) ## 初始价目表 | 名称 | 类型 | 价格 | 单位 | |------|------|------|------| | A4黑白打印 | A4 | 0.10元 | 页 | | A4彩色打印 | A4 | 0.30元 | 页 | | A3黑白打印 | A3 | 0.20元 | 页 | | A3彩色打印 | A3 | 0.60元 | 页 | | 照片打印 | 照片纸 | 2.00元 | 张 | ## 许可证 MIT License