openclaw/projects/glass-v2-migration-analysis.md
2026-02-02 14:02:15 +08:00

312 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# glass-v2 到 glass 迁移分析
## 📊 项目对比
### glass主项目
**已完成**:
- ✅ 多租户核心架构
- ✅ SuperAdmin 独立后台
- ✅ 权限管理系统Spatie + Shield
- ✅ 客户管理Customer + Prescription
- ✅ 订单管理Order + OrderItem
- ✅ 简化版产品管理Product
- ✅ 供应商管理Supplier
### glass-v2功能增强版
**额外功能**:
- ✅ 产品分类管理ProductCategory
- ✅ 品牌管理Brand
- ✅ 采购订单管理PurchaseOrder + PurchaseOrderItem
- ✅ 库存流水管理InventoryTransaction
- ✅ 员工排班管理StaffSchedule + Calendar Widget
---
## 🎯 需要迁移的功能模块
### 1. 产品分类管理 🟢
**迁移文件**:
- `app/Models/ProductCategory.php`
- `app/Filament/Resources/ProductCategories/ProductCategoryResource.php`
- `app/Filament/Resources/ProductCategories/Pages/ManageProductCategories.php`
- `database/migrations/2026_01_31_105640_create_product_categories_table.php`
**数据库表结构**:
```sql
product_categories
- id (bigint, PK)
- name (string, 分类名称)
- slug (string, URL友好标识)
- icon (string, Heroicon图标)
- color (string, 颜色)
- description (text, 描述)
- sort_order (integer, 排序)
- is_active (boolean, 是否启用)
- timestamps
```
**特性**:
- Heroicon 图标支持37个预定义图标
- 自动生成 slug
- 关联产品统计
- 预置5个分类镜架、镜片、隐形眼镜、护理液、配件
---
### 2. 品牌管理 🟢
**迁移文件**:
- `app/Models/Brand.php`
- `app/Filament/Resources/Brands/BrandResource.php`
- `app/Filament/Resources/Brands/Pages/ManageBrands.php`
- `database/migrations/2026_01_31_105643_create_brands_table.php`
**数据库表结构**:
```sql
brands
- id (bigint, PK)
- name (string, 品牌名称)
- slug (string, URL友好标识)
- logo (string, Logo图片)
- description (text, 描述)
- website (string, 官网)
- country (string, 国家/地区)
- sort_order (integer, 排序)
- is_active (boolean, 是否启用)
- timestamps
```
**特性**:
- Logo 上传和显示
- 预置7个品牌雷朋、暴龙、蔡司、依视路、强生、博士伦、海昌
---
### 3. 采购订单管理 🟢
**迁移文件**:
- `app/Models/PurchaseOrder.php`
- `app/Models/PurchaseOrderItem.php`
- `app/Filament/Resources/PurchaseOrders/PurchaseOrderResource.php`
- `app/Filament/Resources/PurchaseOrders/Pages/ManagePurchaseOrders.php`
- `database/migrations/2026_01_22_063828_create_purchase_orders_table.php`
- `database/migrations/2026_01_22_083144_create_purchase_order_items_table.php`
- `database/migrations/2026_01_28_003412_add_received_quantity_to_purchase_order_items_table.php`
**数据库表结构**:
```sql
purchase_orders
- id (bigint, PK)
- supplier_id (bigint, FK)
- staff_id (bigint, FK)
- reference_no (string, 采购单号)
- status (enum: Draft/Ordered/PartialReceived/Received/Cancelled)
- total_amount (decimal, 总金额)
- note (text, 备注)
- timestamps
- soft_deletes
purchase_order_items
- id (bigint, PK)
- purchase_order_id (bigint, FK)
- product_id (bigint, FK)
- quantity (integer, 订购数量)
- received_quantity (integer, 已收货数量, 默认0)
- unit_cost (decimal, 单位成本)
- total_cost (decimal, 总成本)
- note (text, 备注)
- timestamps
```
**特性**:
- 状态流转:草稿 → 已下订 → 部分收货 → 已收货
- 自动计算总金额
- 收货时更新库存流水
- 待收货项目查询
---
### 4. 库存流水管理 🟢
**迁移文件**:
- `app/Models/InventoryTransaction.php`
- `app/Filament/Resources/InventoryTransactions/InventoryTransactionResource.php`
- `app/Filament/Resources/InventoryTransactions/Pages/ManageInventoryTransactions.php`
- `database/migrations/2026_01_22_063830_create_inventory_transactions_table.php`
**数据库表结构**:
```sql
inventory_transactions
- id (bigint, PK)
- product_id (bigint, FK)
- type (enum: in/out/adjust)
- quantity (integer, 数量)
- reference_type (string, 关联类型)
- reference_id (bigint, 关联ID)
- staff_id (bigint, FK)
- balance_after (integer, 变动后余额)
- timestamps
```
**特性**:
- 多态关联(可关联采购订单、销售订单、盘点等)
- 自动记录库存变动
- 支持入库、出库、调整三种类型
---
### 5. 员工排班管理 🟢
**迁移文件**:
- `app/Models/StaffSchedule.php`
- `app/Filament/Resources/StaffSchedules/StaffScheduleResource.php`
- `app/Filament/Resources/StaffSchedules/Pages/ManageStaffSchedules.php`
- `app/Filament/Resources/StaffSchedules/Widgets/StaffScheduleCalendarWidget.php`
- `database/migrations/2026_01_22_070636_create_staff_schedules_table.php`
- `database/migrations/2026_01_28_002939_add_shift_type_to_staff_schedules_table.php`
- `database/migrations/2026_01_28_004432_make_start_end_datetime_nullable_in_staff_schedules.php`
**数据库表结构**:
```sql
staff_schedules
- id (bigint, PK)
- user_id (bigint, FK)
- shift_type (enum: morning/afternoon/full_day/custom)
- schedule_date (date, 排班日期)
- start_time (time, 开始时间)
- end_time (time, 结束时间)
- start_datetime (datetime, 开始日期时间, 可为null)
- end_datetime (datetime, 结束日期时间, 可为null)
- note (text, 备注)
- is_swap (boolean, 是否调班)
- swapped_with_user_id (bigint, FK, 调班对象)
- timestamps
```
**特性**:
- 预定义班次:早班(9-16)、下午班(16-21)、全天(9-21)、自定义
- 日历视图 Widget
- 实时在岗查询
- 支持调班功能
---
## 🔍 差异分析
### glass 项目已有的结构
**Product 模型**(简化版):
```php
- id
- team_id (FK)
- code (产品编码)
- name (产品名称)
- category (string, 旧字段)
- brand (string, 旧字段)
- type (enum: frame/lens/accessory)
- description (text)
- cost_price (decimal)
- retail_price (decimal)
- stock_quantity (integer)
- status (enum: active/inactive/discontinued)
- timestamps
- soft_deletes
```
### glass-v2 的增强
**Product 模型**(增强版):
```php
// 新增字段
product_category_id (bigint, FK) // 替代 category
brand_id (bigint, FK) // 替代 brand
```
**需要修改**:
-`category``brand` 字段改为外键关联
- 添加 BelongsToTenant trait确保数据隔离
---
## ⚠️ 迁移注意事项
### 1. 数据兼容性
**问题**: glass 项目已有 `products` 表,字段为 `category` (string) 和 `brand` (string)
**解决方案**:
- 创建迁移添加 `product_category_id``brand_id` 字段
- 保留旧字段用于数据迁移
- 数据迁移后可删除旧字段
### 2. 多租户隔离
**问题**: v2 的模型没有使用 `BelongsToTenant` trait
**解决方案**:
- 为所有新模型添加 `BelongsToTenant` trait
- 为所有表添加 `team_id` 字段和索引
### 3. 外键约束
**问题**: v2 的外键可能没有级联删除设置
**解决方案**:
- 供应商删除 → 采购订单设为 null
- 产品删除 → 库存流水设为 null
- 分类/品牌删除 → 产品外键设为 null
### 4. 中文本地化
**状态**: glass 项目已有 `lang/zh_CN.json`
**需要添加**:
- 采购订单相关术语
- 库存管理相关术语
- 排班管理相关术语
---
## 📋 迁移计划
### 阶段 1: 数据库结构迁移30分钟
1. 复制所有迁移文件到 glass 项目
2. 修改迁移添加 `team_id` 字段
3. 运行迁移
### 阶段 2: 模型迁移45分钟
1. 复制所有模型文件到 glass 项目
2. 为所有模型添加 `BelongsToTenant` trait
3. 更新 Product 模型关联关系
4. 测试模型关系
### 阶段 3: Filament 资源迁移1小时
1. 复制所有 Resource 文件到 glass 项目
2. 添加多租户中间件配置
3. 添加权限控制
4. 调整导航和分组
### 阶段 4: 数据本地化和 Seeder30分钟
1. 创建 ProductCategoryAndBrandSeeder
2. 添加中文翻译
3. 填充预置数据
### 阶段 5: 测试和调试30分钟
1. 测试 CRUD 操作
2. 测试权限隔离
3. 测试跨租户数据隔离
4. 修复发现的问题
**总预计时间**: 3小时
---
## 🚀 开始迁移
准备开始迁移工作!
---
美羊羊 🐑