# 图书中心管理系统 (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 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 */;