11 KiB
图书中心管理系统 (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+
安装步骤
- 克隆项目
git clone <repository-url>
cd book-center-system
- 安装依赖
go mod tidy
- 配置数据库
-- 创建数据库
CREATE DATABASE book_center CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 导入数据表结构(见 database/schema.sql)
- 配置Redis
# 启动Redis服务
redis-server
- 修改配置
// 在 main.go 中修改数据库连接信息
targetDSN := "username:password@tcp(host:port)/book_center?charset=utf8mb4&parseTime=True&loc=Local"
// 修改Redis连接信息
bookBaseRedisurl = "redis-host:port"
- 运行项目
go run main.go
服务将在 http://localhost:9009 启动
配置说明
数据库配置
// 生产环境数据库
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配置
rdb := redis.NewClient(&redis.Options{
Addr: "119.45.181.25:6666",
Password: "long6166",
})
CORS配置
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部署
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"]
系统服务部署
# 创建系统服务文件
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响应时间统计
- 内存使用情况
贡献指南
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
许可证
本项目采用 MIT 许可证 - 查看 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 */;