# 保健品商城 - 总体设计方案 > 关联项目:健康AI问询助手 > 开发顺序:在健康AI问询助手项目完成后开发 --- ## 一、项目概述 ### 1.1 项目背景 本项目是"健康AI问询助手"的关联项目,为用户提供保健品购买服务。通过AI问诊系统的体质分析和健康建议,智能推荐适合用户的保健品,实现"健康咨询 → 产品推荐 → 购买转化"的完整闭环。 ### 1.2 核心价值 - **精准推荐**:基于用户体质和健康状况,提供个性化产品推荐 - **信任背书**:AI健康助手的专业分析增强用户购买信心 - **便捷体验**:从健康咨询到产品购买的无缝衔接 - **用户粘性**:健康管理与产品消费的双向绑定 ### 1.3 目标用户 | 用户群体 | 特点 | 需求 | |----------|------|------| | 中老年人 | 50-70岁,注重养生 | 心脑血管、骨关节、助眠、血糖调节 | | 亚健康白领 | 25-45岁,工作压力大 | 补气、抗疲劳、护眼、免疫力 | | 养生爱好者 | 各年龄段,关注中医体质 | 体质调养、食疗产品 | --- ## 二、技术架构 ### 2.1 技术栈 | 层次 | 技术选型 | 说明 | |------|----------|------| | Web前端 | Vue 3 + TypeScript + Vite | 与健康AI项目保持一致 | | APP端 | React Native + TypeScript | 与健康AI项目保持一致 | | 后端服务 | Go + Gin + GORM | 与健康AI项目保持一致 | | 数据库 | SQLite / PostgreSQL | 支持切换,与健康AI共享用户表 | | 支付对接 | 微信支付 / 支付宝 | 预留接口 | | 对象存储 | 阿里云OSS / 本地存储 | 产品图片存储 | ### 2.2 系统架构图 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 用户端 │ ├─────────────────────┬───────────────────────────────────────────┤ │ 健康AI Web/APP │ 商城 Web/APP │ │ (体质分析/AI问诊) │ (产品浏览/购物车/订单/支付) │ └─────────┬───────────┴────────────────┬──────────────────────────┘ │ │ │ API Gateway │ │ │ ┌─────────▼────────────────────────────▼──────────────────────────┐ │ 后端服务层 │ ├─────────────────────┬───────────────────────────────────────────┤ │ 健康AI服务 │ 商城服务 │ │ - 用户认证 │ - 产品管理 │ │ - 体质辨识 │ - 购物车 │ │ - AI对话 │ - 订单管理 │ │ - 健康档案 │ - 支付对接 │ │ - 产品推荐接口 │ - 物流查询 │ └─────────┬───────────┴────────────────┬──────────────────────────┘ │ │ ┌─────────▼────────────────────────────▼──────────────────────────┐ │ 数据层 │ ├─────────────────────┬───────────────────────────────────────────┤ │ 共享数据 │ 商城独立数据 │ │ - 用户表 │ - 产品详情表 │ │ - 产品基础表 │ - SKU表 │ │ - 体质-产品关联 │ - 购物车表 │ │ │ - 订单表 │ │ │ - 支付记录表 │ └─────────────────────┴───────────────────────────────────────────┘ ``` ### 2.3 与健康AI项目的双向对接 | 对接方式 | 方向 | 说明 | |----------|------|------| | 用户体系共享 | 双向 | 使用同一套用户认证(JWT Token互认) | | 产品数据同步 | 双向 | 健康AI存储基础产品信息,商城扩展详细信息 | | 产品推荐跳转 | 健康AI → 商城 | AI推荐的产品链接直接跳转到商城产品页 | | AI咨询跳转 | 商城 → 健康AI | 商城产品页/首页提供AI咨询入口,跳转到健康AI | | 体质信息获取 | 商城 ← 健康AI | 商城调用健康AI接口获取用户体质,优化推荐排序 | | 购买记录同步 | 商城 → 健康AI | 用户购买保健品后,同步到健康AI用于AI问诊参考 | --- ## 三、功能模块 ### 3.1 功能架构 ``` 保健品商城 ├── 首页模块 │ ├── Banner轮播 │ ├── AI健康咨询入口(悬浮按钮) │ ├── 体质推荐卡片(对接健康AI) │ ├── 分类导航 │ ├── 热销推荐 │ └── 新品上架 │ ├── 产品模块 │ ├── 产品列表(分类筛选、排序) │ ├── 产品详情 │ │ ├── 图文规格评价 │ │ ├── "咨询适合我吗"按钮 → 跳转AI问诊 │ │ └── 相关体质说明 │ ├── 产品搜索 │ └── 收藏功能 │ ├── AI咨询模块(跳转健康AI) │ ├── 智能健康咨询入口 │ ├── 体质测试入口 │ ├── 历史咨询记录 │ └── 携带产品信息跳转 │ ├── 购物车模块 │ ├── 添加/删除商品 │ ├── 修改数量 │ ├── 选择结算 │ └── 失效商品处理 │ ├── 订单模块 │ ├── 确认订单 │ ├── 地址管理 │ ├── 订单列表 │ ├── 订单详情 │ ├── 取消订单 │ └── 申请退款 │ ├── 支付模块 │ ├── 微信支付 │ ├── 支付宝支付 │ └── 支付结果回调 │ ├── 用户模块 │ ├── 登录/注册(共享健康AI) │ ├── 我的体质报告(跳转健康AI) │ ├── 收货地址管理 │ ├── 我的订单 │ ├── 我的收藏 │ └── 浏览历史 │ └── 其他模块 ├── 物流查询 └── 优惠券(扩展) ``` ### 3.2 核心功能说明 #### 3.2.1 体质推荐功能 从健康AI获取用户体质信息,在商城首页和产品列表页优先展示适合用户体质的产品。 ``` 用户打开商城 │ ▼ 调用健康AI接口获取用户体质 │ ▼ 根据体质查询关联产品 │ ▼ 在"为您推荐"模块展示 ``` #### 3.2.2 智能搜索 支持按症状关键词搜索产品,如"失眠"、"关节痛"、"血压高"等。 #### 3.2.3 AI健康咨询功能(核心) 商城内置多个AI咨询入口,用户点击后跳转到健康AI项目进行咨询。 **入口位置:** | 位置 | 入口形式 | 跳转目标 | 携带参数 | |------|----------|----------|----------| | 首页右下角 | 悬浮按钮"AI咨询" | 健康AI对话页 | 无 | | 首页体质卡片 | "测测我的体质" | 健康AI体质测试页 | 无 | | 产品详情页 | "这款适合我吗?" | 健康AI对话页 | 产品ID、产品名称 | | 我的页面 | "查看体质报告" | 健康AI体质结果页 | 无 | | 购物车页面 | "不知道选哪个?问问AI" | 健康AI对话页 | 购物车产品列表 | **跳转流程:** ``` 商城产品详情页 │ │ 用户点击"这款适合我吗?" ▼ 检查用户登录状态 │ ├─[未登录]─▶ 跳转登录页 → 登录后继续 │ └─[已登录]─▶ 构建跳转URL │ ▼ 跳转健康AI对话页 URL: health-ai://chat?product_id=123&product_name=xxx │ ▼ 健康AI自动发起对话 "我想咨询一下【产品名称】是否适合我" │ ▼ AI根据用户体质和产品信息回答 │ ▼ 用户可继续咨询或返回商城购买 ``` **跳转协议设计:** ``` # Web端跳转(同域或配置跨域) https://health-ai.example.com/chat?source=mall&product_id=123 # APP端跳转(Deep Link) health-ai://chat?source=mall&product_id=123&product_name=xxx # 小程序跳转(如扩展) /pages/chat/index?source=mall&product_id=123 ``` **健康AI接收参数后处理:** 1. 识别来源为商城(source=mall) 2. 根据product_id获取产品信息 3. 自动生成用户问题:"我想了解【产品名称】是否适合我的体质" 4. AI结合用户体质数据回答 #### 3.2.4 购买记录同步 用户在商城购买保健品后,订单信息同步到健康AI,用于: - AI问诊时参考用户已购买的保健品 - 避免重复推荐已购买产品 - 分析用户保健品使用效果 --- ## 四、数据模型设计 ### 4.1 ER图 ```mermaid erDiagram User ||--o{ Order : places User ||--o{ CartItem : has User ||--o{ Address : has User ||--o{ Favorite : has Product ||--o{ ProductSku : has Product ||--o{ CartItem : in Product ||--o{ OrderItem : in Product ||--o{ Favorite : contains Order ||--|{ OrderItem : contains Order ||--o| Payment : has ProductSku ||--o{ CartItem : selected ProductSku ||--o{ OrderItem : ordered User { int id PK string phone string nickname string avatar } Product { int id PK string name string category string sub_category text description text detail_html string main_image json images decimal original_price decimal sale_price int sales_count int stock boolean is_on_sale int sort_order } ProductSku { int id PK int product_id FK string sku_name string sku_image decimal price int stock json attributes } CartItem { int id PK int user_id FK int product_id FK int sku_id FK int quantity boolean selected } Address { int id PK int user_id FK string receiver_name string phone string province string city string district string detail boolean is_default } Order { int id PK string order_no int user_id FK int address_id FK decimal total_amount decimal pay_amount decimal freight_amount string status string pay_type datetime pay_time string logistics_no text remark datetime created_at } OrderItem { int id PK int order_id FK int product_id FK int sku_id FK string product_name string sku_name string image decimal price int quantity } Payment { int id PK string payment_no int order_id FK string pay_type decimal amount string status string trade_no datetime paid_at } Favorite { int id PK int user_id FK int product_id FK datetime created_at } ``` ### 4.2 核心表说明 #### 产品表(Product) | 字段 | 类型 | 说明 | |------|------|------| | id | int | 产品ID(与健康AI同步) | | name | string | 产品名称 | | category | string | 一级分类 | | sub_category | string | 二级分类 | | description | text | 简短描述 | | detail_html | text | 详情页富文本 | | main_image | string | 主图URL | | images | json | 图片列表 | | original_price | decimal | 原价 | | sale_price | decimal | 售价 | | sales_count | int | 销量 | | stock | int | 库存 | | is_on_sale | boolean | 是否上架 | #### 订单表(Order) | 字段 | 类型 | 说明 | |------|------|------| | order_no | string | 订单编号(唯一) | | status | string | 状态:pending/paid/shipped/completed/cancelled/refunding | | pay_type | string | 支付方式:wechat/alipay | | logistics_no | string | 物流单号 | ### 4.3 订单状态机 ``` 待支付(pending) │ ├──[支付成功]──▶ 待发货(paid) │ │ │ ├──[商家发货]──▶ 待收货(shipped) │ │ │ │ │ └──[确认收货]──▶ 已完成(completed) │ │ │ └──[申请退款]──▶ 退款中(refunding) │ └──[取消/超时]──▶ 已取消(cancelled) ``` --- ## 五、API 接口设计 ### 5.1 产品接口 ``` GET /api/products # 产品列表(支持分类、排序、分页) GET /api/products/:id # 产品详情 GET /api/products/search?q=xxx # 搜索产品 GET /api/products/recommend # 体质推荐(调用健康AI) GET /api/categories # 分类列表 ``` ### 5.2 购物车接口 ``` GET /api/cart # 获取购物车 POST /api/cart # 添加到购物车 PUT /api/cart/:id # 更新数量 DELETE /api/cart/:id # 删除商品 PUT /api/cart/select-all # 全选/取消全选 ``` ### 5.3 订单接口 ``` POST /api/orders # 创建订单 GET /api/orders # 订单列表 GET /api/orders/:id # 订单详情 PUT /api/orders/:id/cancel # 取消订单 PUT /api/orders/:id/confirm # 确认收货 POST /api/orders/:id/refund # 申请退款 ``` ### 5.4 支付接口 ``` POST /api/pay/wechat # 微信支付 POST /api/pay/alipay # 支付宝支付 POST /api/pay/callback/wechat # 微信回调 POST /api/pay/callback/alipay # 支付宝回调 GET /api/pay/status/:order_no # 查询支付状态 ``` ### 5.5 地址接口 ``` GET /api/addresses # 地址列表 POST /api/addresses # 添加地址 PUT /api/addresses/:id # 修改地址 DELETE /api/addresses/:id # 删除地址 PUT /api/addresses/:id/default # 设为默认 ``` ### 5.6 收藏接口 ``` GET /api/favorites # 收藏列表 POST /api/favorites # 添加收藏 DELETE /api/favorites/:product_id # 取消收藏 ``` --- ## 六、项目目录结构 ``` healthMall/ ├── web/ # Web前端 │ ├── src/ │ │ ├── api/ # 接口定义 │ │ ├── assets/ # 静态资源 │ │ ├── components/ # 公共组件 │ │ │ ├── ProductCard.vue # 产品卡片 │ │ │ ├── CartItem.vue # 购物车项 │ │ │ └── AddressCard.vue # 地址卡片 │ │ ├── views/ │ │ │ ├── Home.vue # 首页 │ │ │ ├── Category.vue # 分类页 │ │ │ ├── ProductList.vue # 产品列表 │ │ │ ├── ProductDetail.vue # 产品详情 │ │ │ ├── Cart.vue # 购物车 │ │ │ ├── Checkout.vue # 结算页 │ │ │ ├── OrderList.vue # 订单列表 │ │ │ ├── OrderDetail.vue # 订单详情 │ │ │ └── Address.vue # 地址管理 │ │ ├── store/ # 状态管理 │ │ ├── router/ # 路由配置 │ │ └── utils/ # 工具函数 │ └── package.json │ ├── app/ # React Native APP │ ├── src/ │ │ ├── api/ │ │ ├── components/ │ │ ├── screens/ │ │ ├── navigation/ │ │ ├── store/ │ │ └── utils/ │ └── package.json │ ├── server/ # 后端服务 │ ├── cmd/ │ │ └── main.go │ ├── internal/ │ │ ├── api/ │ │ │ ├── handler/ │ │ │ │ ├── product.go │ │ │ │ ├── cart.go │ │ │ │ ├── order.go │ │ │ │ ├── payment.go │ │ │ │ └── address.go │ │ │ ├── middleware/ │ │ │ └── router.go │ │ ├── model/ │ │ │ ├── product.go │ │ │ ├── cart.go │ │ │ ├── order.go │ │ │ ├── payment.go │ │ │ └── address.go │ │ ├── repository/ │ │ ├── service/ │ │ │ ├── product.go │ │ │ ├── cart.go │ │ │ ├── order.go │ │ │ └── payment.go │ │ ├── database/ │ │ └── config/ │ ├── pkg/ │ │ ├── payment/ # 支付SDK封装 │ │ │ ├── wechat.go │ │ │ └── alipay.go │ │ └── logistics/ # 物流查询 │ └── go.mod │ ├── config.yaml # 配置文件 └── README.md ``` --- ## 七、UI 设计规范 ### 7.1 设计原则 - 与健康AI项目保持视觉一致性 - 面向中老年用户,字体和按钮适当放大 - 购买流程清晰简洁,减少操作步骤 ### 7.2 页面规划 | 页面 | 主要功能 | AI咨询入口 | |------|----------|------------| | 首页 | Banner、分类入口、体质推荐卡片、热销榜 | 右下角悬浮按钮、体质卡片"测测体质" | | 分类页 | 左侧分类菜单、右侧产品列表 | 顶部"不知道选什么?问AI" | | 产品详情 | 轮播图、价格、规格选择、加入购物车 | "这款适合我吗?咨询AI" | | 购物车 | 商品列表、全选、价格汇总、去结算 | "不确定?咨询AI帮你选" | | 结算页 | 收货地址、商品清单、支付方式、提交订单 | - | | 订单列表 | Tab分类(全部/待付款/待发货/待收货/已完成) | - | | 订单详情 | 物流信息、订单状态、商品信息、操作按钮 | "使用问题?咨询AI" | | 我的 | 体质报告入口、订单、收藏、地址 | "查看我的体质报告" | ### 7.3 配色方案 | 用途 | 颜色 | 说明 | |------|------|------| | 主色调 | #52C41A | 绿色,与健康主题一致 | | 价格色 | #FF4D4F | 红色,突出价格 | | 辅助色 | #1890FF | 蓝色,链接和按钮 | | 背景色 | #F5F5F5 | 浅灰,页面背景 | | 文字色 | #333333 | 深灰,主要文字 | --- ## 八、开发计划 ### 8.1 阶段划分 | 阶段 | 内容 | 预计周期 | |------|------|----------| | 第一阶段 | 产品展示、购物车 | - | | 第二阶段 | 订单流程、地址管理 | - | | 第三阶段 | 支付对接 | - | | 第四阶段 | APP开发 | - | | 第五阶段 | 物流、优惠券等扩展 | - | ### 8.2 开发任务清单 **后端开发:** 1. 项目初始化(共用健康AI的基础架构) 2. 产品模块(详情、SKU、库存) 3. 购物车模块 4. 地址管理模块 5. 订单模块(创建、状态流转) 6. 支付模块(微信/支付宝) 7. 健康AI对接(用户认证、体质推荐、订单同步) **Web前端开发:** 1. 项目初始化 2. 首页(Banner、分类、推荐、AI咨询入口) 3. 产品列表和详情页(含AI咨询入口) 4. 购物车页面(含AI咨询入口) 5. 结算和订单页面 6. 地址管理页面 7. 我的页面(体质报告入口) 8. 健康AI跳转工具封装 **APP开发:** 1. 项目初始化 2. 导航和Tab配置 3. 各功能页面 4. Deep Link跳转健康AI配置 --- ## 九、与健康AI的集成方案 ### 9.1 用户认证集成 ```go // 商城服务验证Token时,调用健康AI的JWT验证 func ValidateToken(token string) (*UserClaims, error) { // 使用相同的JWT密钥验证 // 或调用健康AI的 /api/auth/validate 接口 } ``` ### 9.2 体质推荐集成 ```go // 商城首页获取用户体质推荐产品 func GetConstitutionRecommend(userID uint) ([]Product, error) { // 1. 调用健康AI接口获取用户体质 // GET http://health-ai-server/api/constitution/result // 2. 根据体质查询推荐产品 // SELECT * FROM products p // JOIN constitution_products cp ON p.id = cp.product_id // WHERE cp.constitution_type = ? } ``` ### 9.3 AI咨询跳转集成(商城 → 健康AI) **Web端跳转工具:** ```typescript // utils/healthAI.ts const HEALTH_AI_BASE_URL = import.meta.env.VITE_HEALTH_AI_URL || 'http://localhost:5173' interface JumpParams { page: 'chat' | 'constitution' | 'result' // 对话页/体质测试/体质结果 productId?: number productName?: string source?: string } // 跳转到健康AI export function jumpToHealthAI(params: JumpParams) { const query = new URLSearchParams() query.set('source', 'mall') if (params.productId) { query.set('product_id', String(params.productId)) } if (params.productName) { query.set('product_name', params.productName) } const url = `${HEALTH_AI_BASE_URL}/${params.page}?${query.toString()}` // 同域:直接跳转 // 跨域:新窗口打开 window.location.href = url } // 在产品详情页使用 // jumpToHealthAI({ page: 'chat', productId: 123, productName: '氨糖软骨素' }) ``` **APP端跳转(React Native):** ```typescript // utils/healthAI.ts import { Linking, Platform } from 'react-native' const HEALTH_AI_SCHEME = 'healthai://' const HEALTH_AI_WEB_URL = 'https://health-ai.example.com' export async function jumpToHealthAI(params: { page: 'chat' | 'constitution' | 'result' productId?: number productName?: string }) { const query = `source=mall&product_id=${params.productId || ''}&product_name=${encodeURIComponent(params.productName || '')}` // 尝试Deep Link const deepLink = `${HEALTH_AI_SCHEME}${params.page}?${query}` const canOpen = await Linking.canOpenURL(deepLink) if (canOpen) { // 健康AI APP已安装,使用Deep Link await Linking.openURL(deepLink) } else { // 健康AI APP未安装,跳转Web版 await Linking.openURL(`${HEALTH_AI_WEB_URL}/${params.page}?${query}`) } } ``` **健康AI接收跳转参数处理:** ```typescript // 健康AI项目 - chat页面 // views/Chat.vue 或 screens/Chat.tsx import { useRoute } from 'vue-router' // Vue // import { useRoute } from '@react-navigation/native' // RN const route = useRoute() onMounted(() => { const { source, product_id, product_name } = route.query if (source === 'mall' && product_id) { // 从商城跳转而来,自动发起产品咨询 const autoMessage = `我想了解【${product_name}】这款产品是否适合我的体质?` sendMessage(autoMessage) } }) ``` ### 9.4 双向跳转入口汇总 | 方向 | 场景 | 入口 | 跳转目标 | |------|------|------|----------| | 商城→健康AI | 首页悬浮按钮 | "AI咨询" | 健康AI对话页 | | 商城→健康AI | 首页体质卡片 | "测测我的体质" | 健康AI体质测试页 | | 商城→健康AI | 产品详情页 | "这款适合我吗?" | 健康AI对话页(带产品参数) | | 商城→健康AI | 购物车页 | "不确定选哪个?" | 健康AI对话页 | | 商城→健康AI | 我的页面 | "查看体质报告" | 健康AI体质结果页 | | 健康AI→商城 | AI回答推荐 | 产品链接 | 商城产品详情页 | | 健康AI→商城 | 体质结果页 | "选购调养产品" | 商城体质推荐列表 | ### 9.5 订单数据同步 用户在商城购买后,同步订单到健康AI用于AI问诊参考: ```go // 商城后端 - 订单完成后同步 func SyncOrderToHealthAI(order *Order) error { payload := map[string]interface{}{ "user_id": order.UserID, "order_no": order.OrderNo, "products": extractProductInfo(order.Items), "created_at": order.CreatedAt, } // 调用健康AI接口同步 _, err := http.Post( config.HealthAI.BaseURL + "/api/sync/purchase", "application/json", bytes.NewBuffer(jsonEncode(payload)), ) return err } ``` ```go // 健康AI后端 - 接收购买记录 // POST /api/sync/purchase func HandlePurchaseSync(c *gin.Context) { var req struct { UserID uint `json:"user_id"` OrderNo string `json:"order_no"` Products []struct { ID uint `json:"id"` Name string `json:"name"` } `json:"products"` } c.BindJSON(&req) // 存储到用户健康档案,AI问诊时可参考 // "用户最近购买了:氨糖软骨素、深海鱼油..." } ``` --- ## 十、安全与合规 ### 10.1 支付安全 - 支付回调验签 - 订单金额校验 - 防止重复支付 ### 10.2 数据安全 - 用户隐私数据加密存储 - HTTPS传输 - SQL注入防护 ### 10.3 合规要求 - 保健品销售资质展示 - 产品不得宣传治疗功效 - 退换货政策明示 --- ## 附录:配置文件示例 ```yaml # config.yaml server: port: 8081 mode: debug database: driver: sqlite dsn: "./data/mall.db" # 健康AI服务配置 health_ai: # 后端API地址(用于数据同步) api_url: "http://localhost:8080" # Web前端地址(用于页面跳转) web_url: "http://localhost:5173" # APP Deep Link Scheme app_scheme: "healthai://" # 同步API密钥 sync_api_key: "your-sync-key" # 支付配置(正式环境从环境变量读取) payment: wechat: app_id: "" mch_id: "" api_key: "" notify_url: "https://yourdomain.com/api/pay/callback/wechat" alipay: app_id: "" private_key: "" public_key: "" notify_url: "https://yourdomain.com/api/pay/callback/alipay" # 文件存储 storage: type: local # local / oss local: path: "./uploads" oss: endpoint: "" access_key: "" secret_key: "" bucket: "" ``` --- > **文档版本**: v1.0 > **创建日期**: 2026-02-01 > **关联项目**: 健康AI问询助手