336 lines
11 KiB
Markdown
336 lines
11 KiB
Markdown
# 图书中心管理系统 (Book Center Management System)
|
||
|
||
## 项目简介
|
||
|
||
图书中心管理系统是一个基于 Go 语言开发的图书信息管理平台,提供图书信息的增删改查、销量管理、图片上传等功能。系统采用 MySQL + Redis 双存储架构,支持高并发访问和数据缓存。
|
||
|
||
## 技术栈
|
||
|
||
- **后端框架**: Gin (Go Web Framework)
|
||
- **数据库**: MySQL 8.0+
|
||
- **缓存**: Redis 6.0+
|
||
- **文件处理**: Excelize (Excel处理)
|
||
- **WebSocket**: Gorilla WebSocket
|
||
- **其他**: CORS支持、JWT认证、分页查询
|
||
|
||
## 系统架构
|
||
|
||
```
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ 前端应用 │ │ Gin API服务 │ │ MySQL数据库 │
|
||
│ │◄──►│ │◄──►│ │
|
||
│ Web/Mobile │ │ 图书中心控制器 │ │ book_center │
|
||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────┐
|
||
│ Redis缓存 │
|
||
│ │
|
||
│ 数据缓存/会话 │
|
||
└─────────────────┘
|
||
```
|
||
|
||
## 主要功能
|
||
|
||
### 📚 图书管理
|
||
- 图书信息查询(条件查询、随机查询)
|
||
- 图书信息新增和更新
|
||
- 图书封面图片管理
|
||
- ISBN验证和格式检查
|
||
|
||
### 📊 销量管理
|
||
- 多维度销量统计(7天、15天、30天等)
|
||
- 销量数据修改和更新
|
||
- 年度销量统计
|
||
|
||
### 🏷️ 违规管理
|
||
- 批量设置违规标记
|
||
- 根据ID或ISBN批量修改违规信息
|
||
- 违规数据统计
|
||
|
||
### 🖼️ 图片管理
|
||
- 图书封面上传
|
||
- 图片URL管理
|
||
- 批量图片更新
|
||
|
||
### 📈 数据导出
|
||
- Excel格式数据导出
|
||
- ISBN批量导出
|
||
- 自定义查询结果导出
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- Go 1.19+
|
||
- MySQL 8.0+
|
||
- Redis 6.0+
|
||
|
||
### 安装步骤
|
||
|
||
1. **克隆项目**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd book-center-system
|
||
```
|
||
|
||
2. **安装依赖**
|
||
```bash
|
||
go mod tidy
|
||
```
|
||
|
||
3. **配置数据库**
|
||
```sql
|
||
-- 创建数据库
|
||
CREATE DATABASE book_center CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||
|
||
-- 导入数据表结构(见 database/schema.sql)
|
||
```
|
||
|
||
4. **配置Redis**
|
||
```bash
|
||
# 启动Redis服务
|
||
redis-server
|
||
```
|
||
|
||
5. **修改配置**
|
||
```go
|
||
// 在 main.go 中修改数据库连接信息
|
||
targetDSN := "username:password@tcp(host:port)/book_center?charset=utf8mb4&parseTime=True&loc=Local"
|
||
|
||
// 修改Redis连接信息
|
||
bookBaseRedisurl = "redis-host:port"
|
||
```
|
||
|
||
6. **运行项目**
|
||
```bash
|
||
go run main.go
|
||
```
|
||
|
||
服务将在 `http://localhost:9009` 启动
|
||
|
||
## 配置说明
|
||
|
||
### 数据库配置
|
||
```go
|
||
// 生产环境数据库
|
||
targetDSN := "book_center:password@tcp(175.27.224.66:3306)/book_center?charset=utf8mb4&parseTime=True&loc=Local"
|
||
|
||
// 连接池配置
|
||
db.SetMaxOpenConns(150) // 最大打开连接数
|
||
db.SetMaxIdleConns(50) // 最大空闲连接数
|
||
db.SetConnMaxLifetime(30 * time.Minute) // 连接最大生存时间
|
||
```
|
||
|
||
### Redis配置
|
||
```go
|
||
rdb := redis.NewClient(&redis.Options{
|
||
Addr: "119.45.181.25:6666",
|
||
Password: "long6166",
|
||
})
|
||
```
|
||
|
||
### CORS配置
|
||
```go
|
||
r.Use(cors.New(cors.Config{
|
||
AllowOrigins: []string{
|
||
"http://localhost:82",
|
||
"https://test.centerbook.buzhiyushu.cn"
|
||
},
|
||
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
||
AllowCredentials: true,
|
||
MaxAge: 12 * time.Hour,
|
||
}))
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
book-center-system/
|
||
├── main.go # 主程序入口
|
||
├── README.md # 项目说明文档
|
||
├── API.md # API接口文档
|
||
├── USAGE.md # 使用说明文档
|
||
├── go.mod # Go模块依赖
|
||
├── go.sum # 依赖校验文件
|
||
├── database/ # 数据库相关
|
||
│ └── schema.sql # 数据表结构
|
||
├── docs/ # 文档目录
|
||
│ ├── images/ # 文档图片
|
||
│ └── examples/ # 示例代码
|
||
└── logs/ # 日志文件
|
||
```
|
||
|
||
## 部署说明
|
||
|
||
### Docker部署
|
||
|
||
```dockerfile
|
||
FROM golang:1.19-alpine AS builder
|
||
WORKDIR /app
|
||
COPY .. .
|
||
RUN go mod tidy && go build -o book-center main.go
|
||
|
||
FROM alpine:latest
|
||
RUN apk --no-cache add ca-certificates
|
||
WORKDIR /root/
|
||
COPY --from=builder /app/book-center .
|
||
EXPOSE 9009
|
||
CMD ["./book-center"]
|
||
```
|
||
|
||
### 系统服务部署
|
||
```bash
|
||
# 创建系统服务文件
|
||
sudo vim /etc/systemd/system/book-center.service
|
||
|
||
[Unit]
|
||
Description=Book Center Management System
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=www-data
|
||
WorkingDirectory=/opt/book-center
|
||
ExecStart=/opt/book-center/book-center
|
||
Restart=always
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
|
||
# 启动服务
|
||
sudo systemctl enable book-center
|
||
sudo systemctl start book-center
|
||
```
|
||
|
||
## 监控和日志
|
||
|
||
### 健康检查
|
||
- `GET /health` - 综合健康检查
|
||
- `GET /ready` - 服务就绪检查
|
||
|
||
### 日志级别
|
||
系统使用标准的Go log包,支持以下日志级别:
|
||
- INFO: 一般信息
|
||
- WARN: 警告信息
|
||
- ERROR: 错误信息
|
||
|
||
### 性能监控
|
||
- 数据库连接池监控
|
||
- Redis连接状态监控
|
||
- API响应时间统计
|
||
- 内存使用情况
|
||
|
||
## 贡献指南
|
||
|
||
1. Fork 项目
|
||
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 打开 Pull Request
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情
|
||
|
||
## 联系方式
|
||
|
||
- 项目维护者: [Your Name]
|
||
- 邮箱: [your.email@example.com]
|
||
- 项目地址: [GitHub Repository URL]
|
||
|
||
## 更新日志
|
||
|
||
### v1.0.0 (2025-08-06)
|
||
- 初始版本发布
|
||
- 基础图书管理功能
|
||
- 销量统计功能
|
||
- 违规管理功能
|
||
- 图片上传功能
|
||
- Excel导出功能
|
||
|
||
表结构
|
||
CREATE TABLE `book_center` (
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||
`category` VARCHAR (40) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '分类',
|
||
`book_name` VARCHAR (400) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '书名',
|
||
`book_pic` VARCHAR (400) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '书图片',
|
||
`book_pic_s` JSON DEFAULT NULL COMMENT '官图json',
|
||
`isbn` VARCHAR (30) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'ISBN',
|
||
`isbn_hash` BIGINT UNSIGNED NOT NULL COMMENT 'ISBN哈希(用于分区)',
|
||
`author` VARCHAR (400) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '作者',
|
||
`editor` VARCHAR (30) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '编辑',
|
||
`binding_layout` VARCHAR (30) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '装帧',
|
||
`publisher` VARCHAR (200) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '出版社',
|
||
`edition` VARCHAR (50) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '版次',
|
||
`format` VARCHAR (50) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '开本',
|
||
`languages` VARCHAR (50) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '语种',
|
||
`publication_time` BIGINT DEFAULT NULL COMMENT '出版时间(时间戳)',
|
||
`print_time` BIGINT DEFAULT NULL COMMENT '印刷时间(时间戳)',
|
||
`paper` VARCHAR (500) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '纸张',
|
||
`pages` INT UNSIGNED DEFAULT NULL COMMENT '页数',
|
||
`wordage` VARCHAR (500) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '字数',
|
||
`fix_price` INT UNSIGNED DEFAULT NULL COMMENT '定价(单位:分)',
|
||
`content` VARCHAR (500) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '内容',
|
||
`remark` VARCHAR (500) CHARACTER
|
||
SET utf8mb4 COLLATE utf8mb4_bin DEFAULT '' COMMENT '备注',
|
||
`vio_book` TINYINT (1) NOT NULL DEFAULT '0' COMMENT '违规书号 (0-正常 1-违规)',
|
||
`book_set` TINYINT (1) NOT NULL DEFAULT '0' COMMENT '套装书 (0-否 1-是)',
|
||
`onenum_mbooks` TINYINT UNSIGNED DEFAULT NULL COMMENT '一号多书 (0-正常 1-违规)',
|
||
`ill_publisher` TINYINT (1) NOT NULL DEFAULT '0' COMMENT '违规出版社 (0-正常 1-违规)',
|
||
`ill_author` TINYINT (1) NOT NULL DEFAULT '0' COMMENT '违规作者(0-正常 1-违规)',
|
||
`day_sale_7` INT NOT NULL DEFAULT '0' COMMENT '7天内销量',
|
||
`day_sale_15` INT NOT NULL DEFAULT '0' COMMENT '15天内销量',
|
||
`day_sale_30` INT NOT NULL DEFAULT '0' COMMENT '30天内销量',
|
||
`day_sale_60` INT NOT NULL DEFAULT '0' COMMENT '60天内销量',
|
||
`day_sale_90` INT NOT NULL DEFAULT '0' COMMENT '90天内销量',
|
||
`day_sale_180` INT NOT NULL DEFAULT '0' COMMENT '180天内销量',
|
||
`day_sale_365` INT NOT NULL DEFAULT '0' COMMENT '365天内销量',
|
||
`this_year_sale` INT NOT NULL DEFAULT '0' COMMENT '今年销量',
|
||
`last_year_sale` INT NOT NULL DEFAULT '0' COMMENT '去年销量',
|
||
`total_sale` INT NOT NULL DEFAULT '0' COMMENT '总销量',
|
||
`sold_out_times` JSON DEFAULT NULL COMMENT '已售时间记录(JSON数组格式)',
|
||
`shipment_cycle` INT DEFAULT NULL COMMENT '出货周期(天)',
|
||
`publiction_times` BIGINT DEFAULT NULL COMMENT '出版时间(时间戳)',
|
||
`cat_id` BIGINT DEFAULT NULL COMMENT '叶子类目id',
|
||
`buy_counts` BIGINT UNSIGNED DEFAULT NULL COMMENT '已售数量',
|
||
`sell_counts` BIGINT UNSIGNED DEFAULT NULL COMMENT '在售数量',
|
||
`del_flag` TINYINT (1) NOT NULL DEFAULT '0' COMMENT '删除标志(0-存在 1-删除)',
|
||
`create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
|
||
`create_by` BIGINT DEFAULT NULL COMMENT '创建者',
|
||
`create_time` BIGINT NOT NULL COMMENT '创建时间(时间戳)',
|
||
`update_by` BIGINT DEFAULT NULL COMMENT '更新者',
|
||
`update_time` BIGINT (20) UNSIGNED ZEROFILL NOT NULL COMMENT '更新时间(时间戳)',
|
||
`libri_scolastici` TINYINT (1) DEFAULT NULL COMMENT '大学教材',
|
||
`libriScolastici` TINYINT (1) DEFAULT NULL COMMENT '大学教材',
|
||
`book_pic_new` JSON DEFAULT NULL COMMENT '书图片',
|
||
PRIMARY KEY (`id`, `isbn_hash`, `isbn`),
|
||
UNIQUE KEY `uk_isbn` (`isbn`, `isbn_hash`),
|
||
KEY `idx_book_name` (`book_name` (100)) USING BTREE,
|
||
KEY `idx_publisher` (`publisher` (50)) USING BTREE,
|
||
KEY `idx_author` (`author` (50)) USING BTREE,
|
||
KEY `idx_total_sale` (`total_sale`) USING BTREE,
|
||
KEY `idx_day_sale_7` (`day_sale_7`) USING BTREE,
|
||
KEY `idx_day_sale_30` (`day_sale_30`) USING BTREE,
|
||
KEY `idx_day_sale_365` (`day_sale_365`) USING BTREE,
|
||
KEY `idx_this_year_sale` (`this_year_sale`) USING BTREE,
|
||
KEY `idx_publication_times` (`publiction_times`) USING BTREE,
|
||
KEY `idx_book_pic` (`book_pic`) USING BTREE,
|
||
KEY `idx_id` (`id`) USING BTREE,
|
||
KEY `idx_core_search` (`day_sale_7`, `vio_book`, `book_set`, `onenum_mbooks`, `ill_publisher`, `ill_author`) USING BTREE,
|
||
KEY `idx_category` (`category`) USING BTREE,
|
||
KEY `idx_counts` (`buy_counts`, `sell_counts`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 3780989 DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '图书基础信息表(哈希分区 by ISBN hash)' /*!50100 PARTITION BY HASH (`isbn_hash`) PARTITIONS 10 */; |