diff --git a/projects/glass-v2-migration-analysis.md b/projects/glass-v2-migration-analysis.md new file mode 100644 index 0000000..8be2881 --- /dev/null +++ b/projects/glass-v2-migration-analysis.md @@ -0,0 +1,311 @@ +# 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: 数据本地化和 Seeder(30分钟) +1. 创建 ProductCategoryAndBrandSeeder +2. 添加中文翻译 +3. 填充预置数据 + +### 阶段 5: 测试和调试(30分钟) +1. 测试 CRUD 操作 +2. 测试权限隔离 +3. 测试跨租户数据隔离 +4. 修复发现的问题 + +**总预计时间**: 3小时 + +--- + +## 🚀 开始迁移 + +准备开始迁移工作! + +--- + +美羊羊 🐑