# 电商微信小程序 数据库mysql 127.0.0.1:3306 root JKjk20011115 ai_dianshang redis 127.0.0.1:6379 ## 项目概述 本项目是一个功能完整的电商微信小程序,提供商品展示、购物车、订单管理、用户管理等核心电商功能。 ## 项目结构 ``` dianshang/ ├── server/ # 后端服务 │ ├── cmd/ # 命令行工具 │ │ ├── migrate/ # 数据库迁移工具 │ │ └── server/ # 服务启动入口 │ ├── configs/ # 配置文件 │ ├── internal/ # 内部代码 │ │ ├── config/ # 配置管理 │ │ ├── handler/ # HTTP处理器 │ │ ├── middleware/ # 中间件 │ │ ├── model/ # 数据模型 │ │ ├── repository/ # 数据访问层 │ │ ├── router/ # 路由配置 │ │ ├── service/ # 业务逻辑层 │ │ └── utils/ # 工具函数 │ ├── migrations/ # 数据库迁移文件 │ ├── go.mod # Go模块文件 │ └── go.sum # Go依赖锁定文件 └── README.md # 项目说明文档 ``` ## 技术栈 ### 后端技术栈 - **后端框架**: Gin - **数据库**: MySQL 8.0+ - **缓存**: Redis - **ORM**: GORM - **配置管理**: Viper - **日志**: Logrus + Lumberjack - **JWT**: golang-jwt/jwt - **密码加密**: bcrypt ## 环境要求 - Go 1.21+ - MySQL 8.0+ - Redis 6.0+ ## 快速开始 ### 1. 克隆项目 ```bash git clone cd dianshang ``` ### 2. 安装依赖 ```bash cd server go mod download ``` ### 3. 配置数据库 创建 MySQL 数据库: ```sql CREATE DATABASE dianshang CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ``` ### 4. 配置文件 修改 `server/configs/config.yaml` 中的数据库和Redis连接信息: ```yaml server: port: 8080 mode: debug database: driver: mysql host: localhost port: 3306 username: root password: your_password dbname: dianshang charset: utf8mb4 parseTime: true loc: Local redis: host: localhost port: 6379 password: "" db: 0 jwt: secret: your_jwt_secret_key expire: 168h log: level: info filename: logs/app.log maxSize: 100 maxAge: 30 maxBackups: 5 wechat: appId: your_wechat_app_id appSecret: your_wechat_app_secret ``` ### 5. 数据库迁移 运行数据库迁移: ```bash # 仅迁移表结构 go run cmd/migrate/main.go # 迁移表结构并初始化示例数据 go run cmd/migrate/main.go --seed ``` 或者直接执行SQL文件: ```bash mysql -u root -p dianshang < migrations/init.sql ``` ### 6. 启动服务 ```bash go run cmd/server/main.go ``` 服务将在 `http://localhost:8080` 启动。 ## API 文档 ### 用户相关接口 #### 用户登录 ``` POST /api/users/login Content-Type: application/json { "code": "微信登录code" } ``` #### 获取用户信息 ``` GET /api/users/profile Authorization: Bearer ``` #### 更新用户信息 ``` PUT /api/users/profile Authorization: Bearer Content-Type: application/json { "nickname": "昵称", "avatar": "头像URL", "gender": 1, "phone": "手机号", "email": "邮箱" } ``` #### 地址管理 ``` GET /api/users/addresses # 获取地址列表 POST /api/users/addresses # 创建地址 PUT /api/users/addresses/:id # 更新地址 DELETE /api/users/addresses/:id # 删除地址 PUT /api/users/addresses/:id/default # 设置默认地址 ``` ### 商品相关接口 #### 获取商品列表 ``` GET /api/products?page=1&limit=10&category_id=1&keyword=搜索关键词&min_price=100&max_price=1000 ``` #### 获取商品详情 ``` GET /api/products/:id ``` #### 获取商品分类 ``` GET /api/products/categories ``` #### 商品搜索 ``` GET /api/products/search?keyword=关键词&page=1&limit=10 ``` #### 热门商品 ``` GET /api/products/hot ``` #### 推荐商品 ``` GET /api/products/recommend ``` #### 商品评价 ``` GET /api/products/:id/reviews # 获取商品评价 POST /api/products/:id/reviews # 创建评价 ``` ### 购物车相关接口 #### 获取购物车 ``` GET /api/cart Authorization: Bearer ``` #### 添加商品到购物车 ``` POST /api/cart Authorization: Bearer Content-Type: application/json { "product_id": 1, "quantity": 2 } ``` #### 更新购物车商品 ``` PUT /api/cart/:id Authorization: Bearer Content-Type: application/json { "quantity": 3 } ``` #### 删除购物车商品 ``` DELETE /api/cart/:id Authorization: Bearer ``` #### 清空购物车 ``` DELETE /api/cart Authorization: Bearer ``` #### 获取购物车数量 ``` GET /api/cart/count Authorization: Bearer ``` ### 订单相关接口 #### 创建订单 ``` POST /api/orders Authorization: Bearer Content-Type: application/json { "address_id": 1, "items": [ { "product_id": 1, "quantity": 2 } ], "remark": "备注" } ``` #### 获取订单列表 ``` GET /api/orders?page=1&limit=10&status=1 Authorization: Bearer ``` #### 获取订单详情 ``` GET /api/orders/:id Authorization: Bearer ``` #### 支付订单 ``` POST /api/orders/:id/pay Authorization: Bearer Content-Type: application/json { "payment_method": 1 } ``` #### 取消订单 ``` POST /api/orders/:id/cancel Authorization: Bearer ``` #### 确认收货 ``` POST /api/orders/:id/receive Authorization: Bearer ``` ### 管理后台接口 #### 用户管理 ``` GET /api/admin/users # 获取用户列表 GET /api/admin/users/:id # 获取用户详情 PUT /api/admin/users/:id/status # 更新用户状态 ``` #### 商品管理 ``` GET /api/admin/products # 获取商品列表 POST /api/admin/products # 创建商品 PUT /api/admin/products/:id # 更新商品 DELETE /api/admin/products/:id # 删除商品 ``` #### 分类管理 ``` GET /api/admin/categories # 获取分类列表 POST /api/admin/categories # 创建分类 PUT /api/admin/categories/:id # 更新分类 DELETE /api/admin/categories/:id # 删除分类 ``` #### 订单管理 ``` GET /api/admin/orders # 获取订单列表 GET /api/admin/orders/:id # 获取订单详情 POST /api/admin/orders/:id/ship # 发货 ``` #### 数据统计 ``` GET /api/admin/statistics # 获取统计数据 GET /api/admin/statistics/daily # 获取每日统计 ``` ## 部署说明 ### Docker 部署 1. 创建 Dockerfile: ```dockerfile FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o main cmd/server/main.go FROM alpine:latest RUN apk --no-cache add ca-certificates tzdata WORKDIR /root/ COPY --from=builder /app/main . COPY --from=builder /app/configs ./configs EXPOSE 8080 CMD ["./main"] ``` 2. 构建镜像: ```bash cd server docker build -t dianshang-server . ``` 3. 运行容器: ```bash docker run -d \ --name dianshang-server \ -p 8080:8080 \ -v $(pwd)/configs:/root/configs \ -v $(pwd)/logs:/root/logs \ dianshang-server ``` ### 生产环境部署 1. 编译二进制文件: ```bash cd server CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o dianshang cmd/server/main.go ``` 2. 上传到服务器并运行: ```bash # 上传文件 scp dianshang user@server:/path/to/app/ scp -r configs user@server:/path/to/app/ # 在服务器上运行 chmod +x dianshang ./dianshang ``` 3. 使用 systemd 管理服务: 创建 `/etc/systemd/system/dianshang.service`: ```ini [Unit] Description=Dianshang Server After=network.target [Service] Type=simple User=www-data WorkingDirectory=/path/to/app ExecStart=/path/to/app/dianshang Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` 启动服务: ```bash sudo systemctl daemon-reload sudo systemctl enable dianshang sudo systemctl start dianshang ``` ### Nginx 反向代理 配置 Nginx: ```nginx server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ## 开发指南 ### 代码规范 - 使用 `gofmt` 格式化代码 - 遵循 Go 官方编码规范 - 使用有意义的变量和函数名 - 添加必要的注释 ### 测试 运行测试: ```bash go test ./... ``` ### 日志 日志文件位置:`logs/app.log` 日志级别: - `debug`: 调试信息 - `info`: 一般信息 - `warn`: 警告信息 - `error`: 错误信息 ## 常见问题 ### 1. 数据库连接失败 检查数据库配置是否正确,确保 MySQL 服务正在运行。 ### 2. Redis 连接失败 检查 Redis 配置是否正确,确保 Redis 服务正在运行。 ### 3. JWT Token 验证失败 检查 JWT 密钥配置是否正确,确保客户端正确传递 Authorization 头。 ## 贡献指南 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) 文件。 ## 业务需求 ### 1. 用户管理 - **用户注册/登录**: 支持微信授权登录 - **用户信息管理**: 个人资料、收货地址管理 - **用户等级**: 普通用户、VIP用户等级体系 - **积分系统**: 购物积分、积分兑换 ### 2. 商品管理 - **商品分类**: 多级分类展示 - **商品详情**: 商品图片、描述、规格、价格 - **商品搜索**: 关键词搜索、分类筛选 - **商品收藏**: 用户收藏商品功能 - **商品评价**: 用户评价和评分系统 ### 3. 购物车功能 - **添加商品**: 选择规格、数量添加到购物车 - **购物车管理**: 修改数量、删除商品 - **批量操作**: 全选、批量删除 ### 4. 订单管理 - **下单流程**: 选择地址、支付方式、确认订单 - **订单状态**: 待支付、待发货、待收货、已完成、已取消 - **订单详情**: 查看订单信息、物流跟踪 - **退款/退货**: 申请退款退货流程 ### 5. 支付功能 - **微信支付**: 集成微信支付API - **支付状态**: 支付成功/失败处理 - **退款处理**: 自动/手动退款 ### 6. 营销功能 - **优惠券**: 满减券、折扣券 - **秒杀活动**: 限时抢购 - **拼团**: 多人拼团优惠 - **推荐系统**: 个性化商品推荐 ### 7. 管理后台 - **商品管理**: 商品增删改查、库存管理 - **订单管理**: 订单处理、发货管理 - **用户管理**: 用户信息查看、权限管理 - **数据统计**: 销售数据、用户数据分析 ## 数据表结构 ### 用户相关表 #### users (用户表) ```sql CREATE TABLE `users` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `openid` VARCHAR(100) NOT NULL COMMENT '微信openid', `unionid` VARCHAR(100) DEFAULT NULL COMMENT '微信unionid', `nickname` VARCHAR(50) DEFAULT NULL COMMENT '昵称', `avatar_url` VARCHAR(255) DEFAULT NULL COMMENT '头像URL', `gender` TINYINT UNSIGNED DEFAULT 0 COMMENT '性别 0-未知 1-男 2-女', `phone` VARCHAR(20) DEFAULT NULL COMMENT '手机号', `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱', `birthday` DATE DEFAULT NULL COMMENT '生日', `level` TINYINT UNSIGNED DEFAULT 1 COMMENT '用户等级', `points` INT UNSIGNED DEFAULT 0 COMMENT '积分', `status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-禁用 1-正常', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_users_openid` (`openid`), KEY `idx_users_deleted_at` (`deleted_at`), KEY `idx_users_phone` (`phone`), KEY `idx_users_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'; ``` #### user_addresses (用户地址表) ```sql CREATE TABLE `user_addresses` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` BIGINT UNSIGNED NOT NULL, `name` VARCHAR(50) NOT NULL COMMENT '收货人姓名', `phone` VARCHAR(20) NOT NULL COMMENT '收货人电话', `province` VARCHAR(50) NOT NULL COMMENT '省份', `city` VARCHAR(50) NOT NULL COMMENT '城市', `district` VARCHAR(50) NOT NULL COMMENT '区县', `detail` VARCHAR(255) NOT NULL COMMENT '详细地址', `is_default` TINYINT UNSIGNED DEFAULT 0 COMMENT '是否默认地址', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_user_addresses_user_id` (`user_id`), KEY `idx_user_addresses_deleted_at` (`deleted_at`), KEY `idx_user_addresses_is_default` (`is_default`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户地址表'; ``` ### 商品相关表 #### categories (商品分类表) ```sql CREATE TABLE `categories` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL COMMENT '分类名称', `parent_id` BIGINT UNSIGNED DEFAULT 0 COMMENT '父分类ID', `level` TINYINT UNSIGNED DEFAULT 1 COMMENT '分类级别', `sort_order` INT DEFAULT 0 COMMENT '排序', `icon` VARCHAR(255) DEFAULT NULL COMMENT '分类图标', `status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-禁用 1-启用', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_categories_parent_id` (`parent_id`), KEY `idx_categories_status` (`status`), KEY `idx_categories_sort_order` (`sort_order`), KEY `idx_categories_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品分类表'; ``` #### products (商品表) ```sql CREATE TABLE `products` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL COMMENT '商品名称', `category_id` BIGINT UNSIGNED NOT NULL COMMENT '分类ID', `brand` VARCHAR(100) DEFAULT NULL COMMENT '品牌', `description` TEXT COMMENT '商品描述', `main_image` VARCHAR(255) DEFAULT NULL COMMENT '主图', `price` DECIMAL(10,2) NOT NULL COMMENT '价格', `original_price` DECIMAL(10,2) DEFAULT NULL COMMENT '原价', `stock` INT UNSIGNED DEFAULT 0 COMMENT '库存', `sales` INT UNSIGNED DEFAULT 0 COMMENT '销量', `status` TINYINT UNSIGNED DEFAULT 1 COMMENT '状态 0-下架 1-上架', `sort_order` INT DEFAULT 0 COMMENT '排序', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_products_category_id` (`category_id`), KEY `idx_products_status` (`status`), KEY `idx_products_sort_order` (`sort_order`), KEY `idx_products_deleted_at` (`deleted_at`), KEY `idx_products_price` (`price`), KEY `idx_products_sales` (`sales`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品表'; ``` #### product_images (商品图片表) ```sql CREATE TABLE `product_images` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `product_id` BIGINT UNSIGNED NOT NULL, `image_url` VARCHAR(255) NOT NULL COMMENT '图片URL', `sort_order` INT DEFAULT 0 COMMENT '排序', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_product_images_product_id` (`product_id`), KEY `idx_product_images_sort_order` (`sort_order`), KEY `idx_product_images_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品图片表'; ``` #### product_specs (商品规格表) ```sql CREATE TABLE `product_specs` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `product_id` BIGINT UNSIGNED NOT NULL, `spec_name` VARCHAR(50) NOT NULL COMMENT '规格名称', `spec_value` VARCHAR(100) NOT NULL COMMENT '规格值', `price` DECIMAL(10,2) DEFAULT NULL COMMENT '规格价格', `stock` INT UNSIGNED DEFAULT 0 COMMENT '规格库存', `sku_code` VARCHAR(100) DEFAULT NULL COMMENT 'SKU编码', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_product_specs_product_id` (`product_id`), KEY `idx_product_specs_sku_code` (`sku_code`), KEY `idx_product_specs_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品规格表'; ``` ### 购物车和订单相关表 #### carts (购物车表) ```sql CREATE TABLE `carts` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `user_id` BIGINT UNSIGNED NOT NULL, `product_id` BIGINT UNSIGNED NOT NULL, `spec_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '规格ID', `quantity` INT UNSIGNED NOT NULL DEFAULT 1 COMMENT '数量', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_carts_user_id` (`user_id`), KEY `idx_carts_product_id` (`product_id`), KEY `idx_carts_spec_id` (`spec_id`), KEY `idx_carts_deleted_at` (`deleted_at`), UNIQUE KEY `uk_carts_user_product_spec` (`user_id`, `product_id`, `spec_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='购物车表'; ``` #### orders (订单表) ```sql CREATE TABLE `orders` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `order_no` VARCHAR(50) NOT NULL COMMENT '订单号', `user_id` BIGINT UNSIGNED NOT NULL, `total_amount` DECIMAL(10,2) NOT NULL COMMENT '订单总金额', `discount_amount` DECIMAL(10,2) DEFAULT 0.00 COMMENT '优惠金额', `shipping_fee` DECIMAL(10,2) DEFAULT 0.00 COMMENT '运费', `actual_amount` DECIMAL(10,2) NOT NULL COMMENT '实付金额', `status` TINYINT UNSIGNED DEFAULT 1 COMMENT '订单状态 1-待支付 2-待发货 3-待收货 4-已完成 5-已取消', `payment_method` TINYINT UNSIGNED DEFAULT NULL COMMENT '支付方式 1-微信支付', `payment_status` TINYINT UNSIGNED DEFAULT 0 COMMENT '支付状态 0-未支付 1-已支付', `shipping_name` VARCHAR(50) DEFAULT NULL COMMENT '收货人姓名', `shipping_phone` VARCHAR(20) DEFAULT NULL COMMENT '收货人电话', `shipping_address` VARCHAR(500) DEFAULT NULL COMMENT '收货地址', `remark` TEXT COMMENT '订单备注', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_orders_order_no` (`order_no`), KEY `idx_orders_user_id` (`user_id`), KEY `idx_orders_status` (`status`), KEY `idx_orders_payment_status` (`payment_status`), KEY `idx_orders_created_at` (`created_at`), KEY `idx_orders_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单表'; ``` #### order_items (订单商品表) ```sql CREATE TABLE `order_items` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `order_id` BIGINT UNSIGNED NOT NULL, `product_id` BIGINT UNSIGNED NOT NULL, `spec_id` BIGINT UNSIGNED DEFAULT NULL COMMENT '规格ID', `product_name` VARCHAR(255) NOT NULL COMMENT '商品名称', `spec_name` VARCHAR(100) DEFAULT NULL COMMENT '规格名称', `price` DECIMAL(10,2) NOT NULL COMMENT '商品价格', `quantity` INT UNSIGNED NOT NULL COMMENT '购买数量', `total_amount` DECIMAL(10,2) NOT NULL COMMENT '小计金额', `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), `deleted_at` DATETIME(3) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_order_items_order_id` (`order_id`), KEY `idx_order_items_product_id` (`product_id`), KEY `idx_order_items_spec_id` (`spec_id`), KEY `idx_order_items_deleted_at` (`deleted_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='订单商品表'; ``` ### 营销相关表 #### coupons (优惠券表) ```sql CREATE TABLE coupons ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL COMMENT '优惠券名称', type TINYINT NOT NULL COMMENT '类型 1-满减券 2-折扣券', value DECIMAL(10,2) NOT NULL COMMENT '优惠值', min_amount DECIMAL(10,2) DEFAULT 0 COMMENT '最低消费金额', total_count INT NOT NULL COMMENT '发放总数', used_count INT DEFAULT 0 COMMENT '已使用数量', start_time TIMESTAMP NOT NULL COMMENT '开始时间', end_time TIMESTAMP NOT NULL COMMENT '结束时间', status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-启用', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` #### user_coupons (用户优惠券表) ```sql CREATE TABLE user_coupons ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, coupon_id INT NOT NULL, status TINYINT DEFAULT 0 COMMENT '状态 0-未使用 1-已使用 2-已过期', used_at TIMESTAMP NULL COMMENT '使用时间', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (coupon_id) REFERENCES coupons(id) ); ``` ### 评价相关表 #### product_reviews (商品评价表) ```sql CREATE TABLE product_reviews ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT NOT NULL, product_id INT NOT NULL, order_id INT NOT NULL, rating TINYINT NOT NULL COMMENT '评分 1-5星', content TEXT COMMENT '评价内容', images VARCHAR(1000) COMMENT '评价图片,JSON格式', is_anonymous TINYINT DEFAULT 0 COMMENT '是否匿名评价', reply_content TEXT COMMENT '商家回复', reply_time TIMESTAMP NULL COMMENT '回复时间', status TINYINT DEFAULT 1 COMMENT '状态 0-隐藏 1-显示', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), FOREIGN KEY (product_id) REFERENCES products(id), FOREIGN KEY (order_id) REFERENCES orders(id) ); ``` ### 公共业务表 #### system_logs (系统日志表) ```sql CREATE TABLE system_logs ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id INT COMMENT '用户ID', module VARCHAR(50) NOT NULL COMMENT '模块名称', action VARCHAR(50) NOT NULL COMMENT '操作类型', method VARCHAR(10) COMMENT '请求方法', url VARCHAR(500) COMMENT '请求URL', ip VARCHAR(50) COMMENT 'IP地址', user_agent VARCHAR(500) COMMENT '用户代理', request_data TEXT COMMENT '请求参数', response_data TEXT COMMENT '响应数据', status_code INT COMMENT '状态码', execution_time INT COMMENT '执行时间(毫秒)', error_message TEXT COMMENT '错误信息', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_user_id (user_id), INDEX idx_module_action (module, action), INDEX idx_created_at (created_at) ); ``` #### system_configs (系统配置表) ```sql CREATE TABLE system_configs ( id INT PRIMARY KEY AUTO_INCREMENT, config_key VARCHAR(100) UNIQUE NOT NULL COMMENT '配置键', config_value TEXT COMMENT '配置值', config_type VARCHAR(20) DEFAULT 'string' COMMENT '配置类型', description VARCHAR(255) COMMENT '配置描述', is_public TINYINT DEFAULT 0 COMMENT '是否公开配置', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` #### notifications (通知消息表) ```sql CREATE TABLE notifications ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT COMMENT '用户ID,为空表示系统通知', type VARCHAR(50) NOT NULL COMMENT '通知类型', title VARCHAR(255) NOT NULL COMMENT '通知标题', content TEXT NOT NULL COMMENT '通知内容', data JSON COMMENT '附加数据', is_read TINYINT DEFAULT 0 COMMENT '是否已读', read_at TIMESTAMP NULL COMMENT '阅读时间', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_user_read (user_id, is_read), INDEX idx_created_at (created_at) ); ``` #### file_uploads (文件上传记录表) ```sql CREATE TABLE file_uploads ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT COMMENT '上传用户ID', original_name VARCHAR(255) NOT NULL COMMENT '原始文件名', file_name VARCHAR(255) NOT NULL COMMENT '存储文件名', file_path VARCHAR(500) NOT NULL COMMENT '文件路径', file_size BIGINT NOT NULL COMMENT '文件大小(字节)', mime_type VARCHAR(100) COMMENT '文件类型', file_hash VARCHAR(64) COMMENT '文件哈希值', usage_type VARCHAR(50) COMMENT '使用类型', status TINYINT DEFAULT 1 COMMENT '状态 0-删除 1-正常', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id), INDEX idx_file_hash (file_hash), INDEX idx_usage_type (usage_type) ); ``` #### admin_users (管理员用户表) ```sql CREATE TABLE admin_users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名', password VARCHAR(255) NOT NULL COMMENT '密码', real_name VARCHAR(50) COMMENT '真实姓名', email VARCHAR(100) COMMENT '邮箱', phone VARCHAR(20) COMMENT '手机号', avatar VARCHAR(255) COMMENT '头像', role_id INT COMMENT '角色ID', last_login_at TIMESTAMP NULL COMMENT '最后登录时间', last_login_ip VARCHAR(50) COMMENT '最后登录IP', status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-正常', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` #### admin_roles (管理员角色表) ```sql CREATE TABLE admin_roles ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL COMMENT '角色名称', description VARCHAR(255) COMMENT '角色描述', permissions JSON COMMENT '权限列表', status TINYINT DEFAULT 1 COMMENT '状态 0-禁用 1-启用', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` #### operation_logs (操作日志表) ```sql CREATE TABLE operation_logs ( id BIGINT PRIMARY KEY AUTO_INCREMENT, admin_id INT COMMENT '管理员ID', module VARCHAR(50) NOT NULL COMMENT '操作模块', operation VARCHAR(100) NOT NULL COMMENT '操作描述', target_type VARCHAR(50) COMMENT '操作对象类型', target_id INT COMMENT '操作对象ID', old_data JSON COMMENT '操作前数据', new_data JSON COMMENT '操作后数据', ip VARCHAR(50) COMMENT 'IP地址', user_agent VARCHAR(500) COMMENT '用户代理', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (admin_id) REFERENCES admin_users(id), INDEX idx_admin_id (admin_id), INDEX idx_module (module), INDEX idx_created_at (created_at) ); ``` #### data_statistics (数据统计表) ```sql CREATE TABLE data_statistics ( id INT PRIMARY KEY AUTO_INCREMENT, stat_date DATE NOT NULL COMMENT '统计日期', stat_type VARCHAR(50) NOT NULL COMMENT '统计类型', stat_key VARCHAR(100) NOT NULL COMMENT '统计键', stat_value DECIMAL(15,2) DEFAULT 0 COMMENT '统计值', extra_data JSON COMMENT '额外数据', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_date_type_key (stat_date, stat_type, stat_key), INDEX idx_stat_date (stat_date), INDEX idx_stat_type (stat_type) ); ``` ## 系统API接口 ### 1. 用户相关接口 #### 用户认证 - `POST /api/auth/login` - 微信登录 - `POST /api/auth/refresh` - 刷新token - `POST /api/auth/logout` - 退出登录 #### 用户信息管理 - `GET /api/user/profile` - 获取用户信息 - `PUT /api/user/profile` - 更新用户信息 - `DELETE /api/user/account` - 注销用户账户 - `GET /api/user/points` - 获取用户积分记录 - `POST /api/user/points/exchange` - 积分兑换 #### 用户地址管理 - `GET /api/user/addresses` - 获取用户地址列表 - `GET /api/user/addresses/{id}` - 获取单个地址详情 - `POST /api/user/addresses` - 添加收货地址 - `PUT /api/user/addresses/{id}` - 更新收货地址 - `DELETE /api/user/addresses/{id}` - 删除收货地址 - `PUT /api/user/addresses/{id}/default` - 设置默认地址 ### 2. 商品相关接口 #### 商品分类管理 - `GET /api/categories` - 获取商品分类列表 - `GET /api/categories/{id}` - 获取分类详情 - `GET /api/categories/{id}/products` - 获取分类下的商品 - `POST /api/categories` - 创建商品分类(管理员) - `PUT /api/categories/{id}` - 更新商品分类(管理员) - `DELETE /api/categories/{id}` - 删除商品分类(管理员) - `PUT /api/categories/{id}/sort` - 调整分类排序(管理员) #### 商品信息管理 - `GET /api/products` - 获取商品列表(支持分页、搜索、筛选) - `GET /api/products/{id}` - 获取商品详情 - `POST /api/products` - 创建商品(管理员) - `PUT /api/products/{id}` - 更新商品(管理员) - `DELETE /api/products/{id}` - 删除商品(管理员) - `PUT /api/products/{id}/status` - 修改商品状态(管理员) - `GET /api/products/search` - 商品搜索 - `GET /api/products/recommend` - 推荐商品 #### 商品规格管理 - `GET /api/products/{id}/specs` - 获取商品规格列表 - `GET /api/products/specs/{id}` - 获取单个规格详情 - `POST /api/products/{id}/specs` - 添加商品规格(管理员) - `PUT /api/products/specs/{id}` - 更新商品规格(管理员) - `DELETE /api/products/specs/{id}` - 删除商品规格(管理员) #### 商品图片管理 - `GET /api/products/{id}/images` - 获取商品图片列表 - `POST /api/products/{id}/images` - 添加商品图片(管理员) - `PUT /api/products/images/{id}` - 更新图片信息(管理员) - `DELETE /api/products/images/{id}` - 删除商品图片(管理员) - `PUT /api/products/images/{id}/sort` - 调整图片排序(管理员) ### 3. 购物车相关接口 #### 购物车管理 - `GET /api/cart` - 获取购物车列表 - `GET /api/cart/count` - 获取购物车商品数量 - `POST /api/cart` - 添加商品到购物车 - `PUT /api/cart/{id}` - 更新购物车商品数量 - `DELETE /api/cart/{id}` - 删除购物车商品 - `DELETE /api/cart/batch` - 批量删除购物车商品 - `DELETE /api/cart/clear` - 清空购物车 - `POST /api/cart/batch` - 批量添加商品到购物车 ### 4. 订单相关接口 #### 订单管理 - `GET /api/orders` - 获取订单列表 - `GET /api/orders/{id}` - 获取订单详情 - `POST /api/orders` - 创建订单 - `PUT /api/orders/{id}` - 更新订单信息(管理员) - `DELETE /api/orders/{id}` - 删除订单(管理员) - `PUT /api/orders/{id}/cancel` - 取消订单 - `PUT /api/orders/{id}/confirm` - 确认收货 - `GET /api/orders/{id}/logistics` - 获取物流信息 #### 订单商品管理 - `GET /api/orders/{id}/items` - 获取订单商品列表 - `GET /api/order-items/{id}` - 获取订单商品详情 - `POST /api/orders/{id}/items` - 添加订单商品(管理员) - `PUT /api/order-items/{id}` - 更新订单商品(管理员) - `DELETE /api/order-items/{id}` - 删除订单商品(管理员) #### 支付相关 - `POST /api/orders/{id}/pay` - 发起支付 - `POST /api/orders/pay/callback` - 支付回调 - `GET /api/orders/{id}/payment-status` - 获取支付状态 - `POST /api/orders/{id}/refund` - 申请退款 - `GET /api/orders/{id}/refund-status` - 获取退款状态 ### 5. 营销相关接口 #### 优惠券管理 - `GET /api/coupons` - 获取可领取优惠券列表 - `GET /api/coupons/{id}` - 获取优惠券详情 - `POST /api/coupons` - 创建优惠券(管理员) - `PUT /api/coupons/{id}` - 更新优惠券(管理员) - `DELETE /api/coupons/{id}` - 删除优惠券(管理员) - `PUT /api/coupons/{id}/status` - 修改优惠券状态(管理员) - `POST /api/coupons/{id}/receive` - 领取优惠券 - `GET /api/orders/available-coupons` - 获取订单可用优惠券 #### 用户优惠券管理 - `GET /api/user/coupons` - 获取用户优惠券列表 - `GET /api/user/coupons/{id}` - 获取用户优惠券详情 - `PUT /api/user/coupons/{id}/use` - 使用优惠券 - `DELETE /api/user/coupons/{id}` - 删除用户优惠券 #### 活动管理 - `GET /api/activities/seckill` - 获取秒杀活动列表 - `GET /api/activities/seckill/{id}` - 获取秒杀活动详情 - `POST /api/activities/seckill` - 创建秒杀活动(管理员) - `PUT /api/activities/seckill/{id}` - 更新秒杀活动(管理员) - `DELETE /api/activities/seckill/{id}` - 删除秒杀活动(管理员) - `POST /api/activities/seckill/{id}/join` - 参与秒杀 - `GET /api/activities/group-buy` - 获取拼团活动列表 - `GET /api/activities/group-buy/{id}` - 获取拼团活动详情 - `POST /api/activities/group-buy` - 创建拼团活动(管理员) - `PUT /api/activities/group-buy/{id}` - 更新拼团活动(管理员) - `DELETE /api/activities/group-buy/{id}` - 删除拼团活动(管理员) - `POST /api/activities/group-buy/{id}/join` - 参与拼团 ### 6. 评价相关接口 #### 商品评价管理 - `GET /api/products/{id}/reviews` - 获取商品评价列表 - `GET /api/reviews/{id}` - 获取评价详情 - `POST /api/orders/{id}/review` - 提交订单评价 - `PUT /api/reviews/{id}` - 更新评价(用户本人) - `DELETE /api/reviews/{id}` - 删除评价(用户本人或管理员) - `POST /api/reviews/{id}/reply` - 商家回复评价(管理员) - `PUT /api/reviews/{id}/status` - 修改评价状态(管理员) - `GET /api/user/reviews` - 获取用户评价列表 ### 7. 收藏相关接口 - `GET /api/user/favorites` - 获取用户收藏列表 - `POST /api/products/{id}/favorite` - 收藏商品 - `DELETE /api/products/{id}/favorite` - 取消收藏 ### 8. 通知相关接口 #### 用户通知管理 - `GET /api/notifications` - 获取用户通知列表 - `GET /api/notifications/{id}` - 获取通知详情 - `PUT /api/notifications/{id}/read` - 标记通知为已读 - `PUT /api/notifications/read-all` - 标记所有通知为已读 - `DELETE /api/notifications/{id}` - 删除通知 - `GET /api/notifications/unread-count` - 获取未读通知数量 #### 系统通知管理(管理员) - `GET /api/admin/notifications` - 获取所有通知列表 - `POST /api/admin/notifications` - 创建系统通知 - `PUT /api/admin/notifications/{id}` - 更新通知 - `DELETE /api/admin/notifications/{id}` - 删除通知 - `POST /api/admin/notifications/broadcast` - 广播通知给所有用户 ### 9. 文件上传接口 #### 文件管理 - `POST /api/upload/image` - 上传图片 - `POST /api/upload/file` - 上传文件 - `GET /api/upload/policy` - 获取上传策略(如阿里云OSS签名) - `GET /api/files` - 获取文件列表(管理员) - `GET /api/files/{id}` - 获取文件详情 - `DELETE /api/files/{id}` - 删除文件 - `GET /api/files/statistics` - 获取文件统计信息(管理员) ### 10. 系统配置接口 #### 配置管理 - `GET /api/config/public` - 获取公开配置 - `GET /api/config/app` - 获取应用配置 - `GET /api/admin/configs` - 获取所有系统配置(管理员) - `GET /api/admin/configs/{key}` - 获取指定配置(管理员) - `POST /api/admin/configs` - 创建系统配置(管理员) - `PUT /api/admin/configs/{key}` - 更新系统配置(管理员) - `DELETE /api/admin/configs/{key}` - 删除系统配置(管理员) ### 12. 日志相关接口 #### 系统日志管理 - `GET /api/admin/logs/system` - 获取系统日志列表(管理员) - `GET /api/admin/logs/system/{id}` - 获取系统日志详情(管理员) - `DELETE /api/admin/logs/system/{id}` - 删除系统日志(管理员) - `DELETE /api/admin/logs/system/batch` - 批量删除系统日志(管理员) - `GET /api/admin/logs/system/statistics` - 获取日志统计(管理员) #### 操作日志管理 - `GET /api/admin/logs/operation` - 获取操作日志列表(管理员) - `GET /api/admin/logs/operation/{id}` - 获取操作日志详情(管理员) - `DELETE /api/admin/logs/operation/{id}` - 删除操作日志(管理员) - `DELETE /api/admin/logs/operation/batch` - 批量删除操作日志(管理员) ### 13. 数据统计接口 #### 统计数据管理 - `GET /api/admin/statistics/data` - 获取统计数据列表(管理员) - `GET /api/admin/statistics/data/{id}` - 获取统计数据详情(管理员) - `POST /api/admin/statistics/data` - 创建统计数据(管理员) - `PUT /api/admin/statistics/data/{id}` - 更新统计数据(管理员) - `DELETE /api/admin/statistics/data/{id}` - 删除统计数据(管理员) - `POST /api/admin/statistics/calculate` - 手动触发统计计算(管理员) ### 11. 管理后台接口 #### 管理员认证 - `POST /api/admin/login` - 管理员登录 - `POST /api/admin/logout` - 管理员退出 - `GET /api/admin/profile` - 获取管理员信息 #### 用户管理 - `GET /api/admin/users` - 获取用户列表 - `GET /api/admin/users/{id}` - 获取用户详情 - `PUT /api/admin/users/{id}/status` - 修改用户状态 #### 商品管理 - `GET /api/admin/products` - 获取商品列表 - `POST /api/admin/products` - 添加商品 - `PUT /api/admin/products/{id}` - 更新商品 - `DELETE /api/admin/products/{id}` - 删除商品 - `PUT /api/admin/products/{id}/status` - 修改商品状态 #### 订单管理 - `GET /api/admin/orders` - 获取订单列表 - `GET /api/admin/orders/{id}` - 获取订单详情 - `PUT /api/admin/orders/{id}/ship` - 订单发货 - `PUT /api/admin/orders/{id}/status` - 修改订单状态 #### 数据统计 - `GET /api/admin/statistics/overview` - 获取概览数据 - `GET /api/admin/statistics/sales` - 获取销售统计 - `GET /api/admin/statistics/users` - 获取用户统计 - `GET /api/admin/statistics/products` - 获取商品统计 #### 系统管理 - `GET /api/admin/configs` - 获取系统配置列表 - `PUT /api/admin/configs/{key}` - 更新系统配置 - `GET /api/admin/logs` - 获取系统日志 - `GET /api/admin/operation-logs` - 获取操作日志 ## 技术栈 ### 前端(小程序) - **框架**: 微信小程序原生开发 / uni-app - **UI组件**: Vant Weapp / uView - **状态管理**: Vuex / Pinia - **网络请求**: wx.request / axios ### 后端 - **语言**: Go (Golang) - **Web框架**: Gin / Fiber / Echo - **ORM框架**: GORM - **数据库**: MySQL 8.0+ - **缓存**: Redis - **消息队列**: RabbitMQ / Kafka - **配置管理**: Viper - **日志**: Logrus / Zap - **API文档**: Swagger (gin-swagger) ### 部署 - **服务器**: 阿里云 / 腾讯云 - **容器**: Docker - **反向代理**: Nginx - **监控**: Prometheus + Grafana - **进程管理**: Systemd / Supervisor ## 开发规范 ### Go代码规范 - 遵循Go官方代码规范 (gofmt, golint) - 使用goimports自动管理导入 - 变量命名采用驼峰命名法 - 包名使用小写字母 - 接口名以-er结尾 - 错误处理不能忽略 - 使用context.Context进行超时控制 ### GORM模型规范 ```go // 模型定义示例 type User struct { ID uint `gorm:"primarykey" json:"id"` OpenID string `gorm:"uniqueIndex;size:100;not null" json:"openid"` UnionID string `gorm:"size:100" json:"unionid"` Nickname string `gorm:"size:50" json:"nickname"` Avatar string `gorm:"size:255" json:"avatar"` Gender uint8 `gorm:"default:0" json:"gender"` Phone string `gorm:"size:20;index" json:"phone"` Email string `gorm:"size:100" json:"email"` Birthday *time.Time `json:"birthday"` Points uint `gorm:"default:0" json:"points"` Level uint8 `gorm:"default:1" json:"level"` Status uint8 `gorm:"default:1;index" json:"status"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } ``` ### API规范 - RESTful API设计 - 统一的响应格式 ```go type Response struct { Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data,omitempty"` } ``` - 错误码标准化 - 接口版本控制 (v1, v2) - 使用Gin中间件进行认证和日志 ### 数据库规范 - 表名使用下划线命名 - 字段名使用下划线命名 - 必须有created_at、updated_at和deleted_at字段 - 使用GORM的软删除功能 - 主键使用BIGINT UNSIGNED - 字符集使用utf8mb4 - 合理添加索引提高查询性能 ### 项目结构规范 - cmd/: 应用程序入口 - internal/: 内部应用代码 - pkg/: 可复用的包 - configs/: 配置文件 - migrations/: 数据库迁移文件 ## 项目结构 ``` dianshang/ ├── miniprogram/ # 小程序前端 │ ├── pages/ # 页面文件 │ ├── components/ # 组件文件 │ ├── utils/ # 工具函数 │ ├── api/ # API接口 │ └── app.js # 小程序入口 ├── server/ # Go后端服务 │ ├── cmd/ # 应用程序入口 │ │ └── main.go # 主程序入口 │ ├── internal/ # 内部应用代码 │ │ ├── handler/ # HTTP处理器(控制器) │ │ ├── service/ # 业务逻辑层 │ │ ├── repository/ # 数据访问层 │ │ ├── model/ # 数据模型(GORM) │ │ ├── middleware/ # 中间件 │ │ ├── config/ # 配置管理 │ │ └── router/ # 路由配置 │ ├── pkg/ # 可复用的包 │ │ ├── utils/ # 工具函数 │ │ ├── logger/ # 日志包 │ │ ├── jwt/ # JWT认证 │ │ └── response/ # 统一响应格式 │ ├── configs/ # 配置文件 │ │ ├── config.yaml # 主配置文件 │ │ └── database.yaml # 数据库配置 │ ├── migrations/ # 数据库迁移文件 │ ├── scripts/ # 脚本文件 │ ├── go.mod # Go模块文件 │ ├── go.sum # 依赖校验文件 │ └── Dockerfile # Docker构建文件 ├── docs/ # 项目文档 │ ├── api/ # API文档 │ └── database/ # 数据库文档 └── README.md # 项目说明 ``` ## 部署说明 ### 环境要求 - Go 1.19+ - MySQL 8.0+ - Redis 6.0+ - Nginx ### 部署步骤 1. **克隆项目** ```bash git clone cd dianshang ``` 2. **安装Go依赖** ```bash cd server go mod download go mod tidy ``` 3. **配置环境** ```bash cp configs/config.yaml.example configs/config.yaml # 编辑配置文件,配置数据库连接等信息 ``` 4. **数据库初始化** ```bash # 运行数据库迁移 go run cmd/main.go migrate # 或使用migrate工具 migrate -path migrations -database "mysql://user:password@tcp(localhost:3306)/dbname" up ``` 5. **编译和启动服务** ```bash # 开发环境 go run cmd/main.go # 生产环境编译 go build -o bin/dianshang cmd/main.go ./bin/dianshang # 或使用Air进行热重载开发 air ``` 6. **Docker部署** ```bash # 构建镜像 docker build -t dianshang-server . # 运行容器 docker run -d \ --name dianshang-server \ -p 8080:8080 \ -v $(pwd)/configs:/app/configs \ dianshang-server ``` 7. **配置Nginx** ```nginx server { listen 80; server_name your-domain.com; location /api { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location / { root /path/to/miniprogram/dist; try_files $uri $uri/ /index.html; } } ``` ### 生产环境配置示例 **configs/config.yaml** ```yaml server: port: 8080 mode: release database: driver: mysql host: localhost port: 3306 username: root password: your_password dbname: dianshang charset: utf8mb4 parseTime: true loc: Local redis: host: localhost port: 6379 password: "" db: 0 jwt: secret: your_jwt_secret expire: 7200 log: level: info filename: logs/app.log maxSize: 100 maxAge: 30 maxBackups: 5 ``` ### 配置文件 - 数据库配置 - 微信小程序配置 - 支付配置 - 第三方服务配置 ## 联系方式 - 项目负责人: [姓名] - 邮箱: [邮箱地址] - 技术支持: [联系方式] --- *本文档会根据项目进展持续更新*