Selaa lähdekoodia

清理临时文件并更新任务记录

- 删除迁移过程中的临时文件
- 更新WORK.md任务记录
- 完成组系统迁移的收尾工作
notfff 7 kuukautta sitten
vanhempi
commit
3cedce4710

+ 202 - 0
AiWork/2025年05月/30日0938-移除传统合成系统迁移到组系统.md

@@ -0,0 +1,202 @@
+# 移除传统合成系统,完全迁移到组系统模式
+
+> 任务时间:2025年5月30日 09:38
+> 任务状态:✅ 已完成
+
+## 任务概述
+
+根据用户要求,移除传统合成系统,只使用组系统模式。由于目前处于开发阶段,直接更新数据库结构和代码实现。
+
+## 执行步骤
+
+### 1. 数据迁移
+
+#### 1.1 迁移现有配方数据
+- 为每个现有配方创建对应的消耗组和奖励组
+- 将传统的材料表数据迁移到消耗组系统
+- 将传统的产出配置迁移到奖励组系统
+- 更新配方记录,设置组系统ID
+
+#### 1.2 迁移详情
+迁移了6个配方:
+- 配方ID=2: 铜矿石冶炼
+- 配方ID=3: 金矿石冶炼  
+- 配方ID=4: 铁质工具箱制作
+- 配方ID=5: 高级肥料制作
+- 配方ID=6: 木板制作
+- 配方ID=7: 高级木材加工
+
+每个配方都创建了:
+- 消耗组:包含材料消耗和货币消耗
+- 奖励组:包含产出物品和成功率
+
+### 2. 数据库结构更新
+
+#### 2.1 移除传统字段
+从 `kku_item_recipes` 表中移除:
+- `result_item_id` - 产出物品ID
+- `result_min_quantity` - 最小产出数量
+- `result_max_quantity` - 最大产出数量
+- `success_rate` - 成功率
+- `coin_cost` - 货币成本
+- `level_required` - 所需等级
+- `is_default_unlocked` - 是否默认解锁
+- `unlock_condition` - 解锁条件
+- `cooldown_seconds` - 冷却时间
+
+#### 2.2 删除传统表
+- 删除 `kku_item_recipe_materials` 表
+- 删除相关外键约束
+
+#### 2.3 保留字段
+保留的字段:
+- `id` - 配方ID
+- `name` - 配方名称
+- `code` - 配方编码
+- `description` - 配方描述
+- `consume_group_id` - 消耗组ID
+- `reward_group_id` - 奖励组ID
+- `condition_group_id` - 条件组ID
+- `category_id` - 配方分类ID
+- `sort_order` - 排序权重
+- `is_active` - 是否激活
+
+### 3. 代码重构
+
+#### 3.1 更新 ItemRecipe 模型
+- 移除传统字段的属性定义
+- 更新 `$fillable` 数组
+- 更新 `$casts` 数组
+- 修改 `canCraftByUser` 方法使用组系统服务
+
+#### 3.2 重构 CraftService
+- 更新 import 语句,引入组系统服务
+- 完全重写 `craftItem` 方法:
+  - 使用 `ConsumeService::executeConsume` 执行消耗
+  - 使用 `RewardService::grantReward` 发放奖励
+  - 更新日志记录格式
+  - 更新返回值结构
+- 更新 `getUserAvailableRecipes` 方法
+- 移除对 `ItemRecipeMaterial` 的依赖
+
+#### 3.3 删除废弃文件
+- 删除 `ItemRecipeMaterial` 模型文件
+
+### 4. 文档更新
+
+#### 4.1 更新系统文档
+更新 `app/Module/GameItems/Docs/物品合成系统.md`:
+- 修改系统概述,移除混合架构说明
+- 更新数据库结构文档
+- 更新系统架构说明
+- 更新代码使用示例
+- 更新配置示例
+- 更新系统特点说明
+
+#### 4.2 文档主要变更
+- 移除传统模式相关内容
+- 强调组系统架构的优势
+- 提供新的配置示例
+- 更新API使用方法
+
+## 技术实现细节
+
+### 组系统集成
+
+#### 消耗组配置
+```sql
+-- 创建消耗组
+INSERT INTO game_consume_groups (name, code, description) 
+VALUES ('合成消耗: 配方名称', 'craft_consume_ID', '配方描述');
+
+-- 添加物品消耗
+INSERT INTO game_consume_items (group_id, consume_type, target_id, quantity) 
+VALUES (group_id, 1, item_id, quantity);
+
+-- 添加货币消耗
+INSERT INTO game_consume_items (group_id, consume_type, target_id, quantity) 
+VALUES (group_id, 2, fund_config_id, amount);
+```
+
+#### 奖励组配置
+```sql
+-- 创建奖励组
+INSERT INTO game_reward_groups (name, code, description, is_random, reward_mode) 
+VALUES ('合成奖励: 配方名称', 'craft_reward_ID', '配方描述', 0, 1);
+
+-- 添加奖励项
+INSERT INTO game_reward_items (group_id, reward_type, target_id, quantity, probability, is_guaranteed) 
+VALUES (group_id, 1, item_id, quantity, success_rate, guaranteed);
+```
+
+### 服务层调用
+
+#### 新的合成流程
+```php
+// 1. 验证配方
+$canCraft = $recipe->canCraftByUser($userId);
+
+// 2. 执行消耗
+$consumeResult = ConsumeService::executeConsume($userId, $recipe->consume_group_id, 'craft', $recipeId);
+
+// 3. 发放奖励
+$rewardResult = RewardService::grantReward($userId, $recipe->reward_group_id, 'craft', $recipeId);
+
+// 4. 记录日志
+$craftLog = new ItemCraftLog([...]);
+```
+
+## 验证结果
+
+### 数据验证
+- ✅ 所有配方成功迁移到组系统
+- ✅ 数据库结构更新完成
+- ✅ 传统字段和表已删除
+
+### 代码验证
+- ✅ 模型更新完成,无语法错误
+- ✅ 服务层重构完成
+- ✅ 组系统服务集成成功
+
+### 文档验证
+- ✅ 系统文档更新完成
+- ✅ 配置示例更新
+- ✅ API文档同步
+
+## 系统优势
+
+### 架构优势
+1. **统一性**:完全基于组系统,架构清晰统一
+2. **灵活性**:支持复杂的合成逻辑和条件判断
+3. **可扩展性**:基于组系统的设计便于功能扩展
+4. **模块化**:消耗、奖励、条件分离,便于维护
+
+### 技术优势
+1. **服务化**:通过服务层调用,接口清晰
+2. **事务安全**:完整的事务处理,确保数据一致性
+3. **详细日志**:完整记录合成过程,便于追踪
+4. **组系统集成**:与游戏核心组系统完全集成
+
+## 提交信息
+
+```
+移除传统合成系统,完全迁移到组系统模式
+
+- 数据迁移:将所有配方从传统模式迁移到组系统
+- 数据库更新:移除传统字段,删除材料表
+- 代码重构:更新CraftService使用组系统服务
+- 模型更新:移除ItemRecipeMaterial,简化ItemRecipe
+- 文档更新:更新系统文档反映新架构
+- 架构统一:完全基于组系统的现代化设计
+```
+
+## 总结
+
+成功完成了物品合成系统从传统模式到组系统模式的完全迁移:
+
+1. **数据层面**:所有配方数据成功迁移,数据库结构简化
+2. **代码层面**:完全重构服务层,集成组系统服务
+3. **架构层面**:实现统一的组系统架构,提升系统可维护性
+4. **文档层面**:更新所有相关文档,确保开发团队理解新架构
+
+系统现在完全依赖组系统提供的强大功能,为游戏的合成玩法提供了灵活而稳定的技术支撑。

+ 8 - 12
AiWork/WORK.md

@@ -10,7 +10,7 @@
 
 ## 待处理任务
 
-物品分解规则  的 
+物品分解规则  的
  $item_id  物品ID,
  外键关联kku_item_items表,
   $reward_group_id  奖励组ID,
@@ -21,7 +21,7 @@
    $priority  规则优先级
 分别负责什么功能,检查代码中是否与期望规则一致,维护一份`物品分解系统`文档
 
-
+检查系统,,
 奖励实现: 随机三种物品,A %10 1-10个 未命中没有;B 30% 5- 20个 未命中没有; C 必中 10-50个;目前的奖励组系统能实现么?不能实现进行改进
 
 分解系统也是,优化合成系统,消耗使用‘消耗组’,合成结果 使用‘奖励组’,解锁条件使用 ’条件组
@@ -30,13 +30,18 @@
 物品合成配方:
 1. 400苹果果实+ 400西瓜果实 = 1 木材
 2. 800苹果果实 + 150 南瓜果实= 1 钢材
-3. 800西瓜果实 + 150 草莓果实 = 1石材 
+3. 800西瓜果实 + 150 草莓果实 = 1石材
 4.  35 萝卜果实 = 1普通宠物口粮
 4.  70 苹果果实 = 1高级宠物口粮
 
 
 ## 已完成任务(保留最新的10条,多余的删除)
 
+- [x] 2025-05-30 09:38 - 移除传统合成系统,完全迁移到组系统模式
+  - 任务记录: `AiWork/2025年05月/30日0938-移除传统合成系统迁移到组系统.md`
+  - 完成时间: 2025-05-30 09:38
+  - 描述: 完全移除传统合成系统,将所有配方迁移到组系统模式,包括数据迁移、数据库结构更新、代码重构、文档更新,实现统一的组系统架构
+
 - [x] 2025-05-29 21:30 - 商店商品列表增加消耗组详情和奖励组详情列
   - 任务记录: `AiWork/2025年05月/29日2130-商店商品列表增加消耗组奖励组详情列.md`
   - 完成时间: 2025-05-29 21:30
@@ -97,16 +102,7 @@
   - 完成时间: 2025-05-27 18:30
   - 描述: 为神秘种子增加产出种类,将基本果实(物品ID 2-11)全部加入并平均分配概率,重新配置60条土地影响记录,提升游戏丰富性和策略性
 
-- [x] 2025-05-27 18:15 - 神秘种子土地影响系统实施完成
-  - 任务记录: `AiWork/2025年05月/27日1815-神秘种子土地影响系统实施完成.md`
-  - 完成时间: 2025-05-27 18:15
-  - 描述: 完整实施神秘种子土地影响系统,包括数据库创建、模型实现、业务逻辑、系统集成、后台管理、测试等全部功能,支持概率修正值和覆盖值的混合使用
 
-- [x] 2025-05-27 18:00 - 神秘种子系统增加概率覆盖值功能
-  - 任务记录: `AiWork/2025年05月/27日1800-神秘种子系统增加概率覆盖值.md`
-  - 更新文档: `app/Module/Farm/Docs/神秘种子土地影响系统设计.md`
-  - 完成时间: 2025-05-27 18:00
-  - 描述: 为神秘种子土地影响系统增加概率覆盖值字段,优先级高于修正值,提供更精确的概率控制机制,支持突破性的概率改变
 
 
 

+ 0 - 146
batch_migrate_recipes.php

@@ -1,146 +0,0 @@
-<?php
-
-require_once __DIR__ . '/vendor/autoload.php';
-
-// 启动Laravel应用
-$app = require_once __DIR__ . '/bootstrap/app.php';
-$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
-$kernel->bootstrap();
-
-use Illuminate\Support\Facades\DB;
-
-echo "开始批量迁移剩余配方...\n";
-
-try {
-    DB::transaction(function () {
-        // 获取还未迁移的配方
-        $recipes = DB::table('kku_item_recipes')
-            ->whereNull('consume_group_id')
-            ->whereNull('reward_group_id')
-            ->get();
-        
-        echo "找到 " . count($recipes) . " 个配方需要迁移\n";
-        
-        foreach ($recipes as $recipe) {
-            echo "处理配方: {$recipe->name} (ID: {$recipe->id})\n";
-            
-            // 1. 创建消耗组
-            $consumeGroupId = DB::table('kku_game_consume_groups')->insertGetId([
-                'name' => "合成消耗: {$recipe->name}",
-                'code' => "craft_consume_{$recipe->id}",
-                'description' => "配方 {$recipe->name} 的消耗组",
-                'created_at' => now(),
-                'updated_at' => now(),
-            ]);
-            
-            echo "  - 创建消耗组 ID: {$consumeGroupId}\n";
-            
-            // 2. 添加材料消耗项
-            $materials = DB::table('kku_item_recipe_materials')
-                ->where('recipe_id', $recipe->id)
-                ->get();
-            
-            foreach ($materials as $material) {
-                DB::table('kku_game_consume_items')->insert([
-                    'group_id' => $consumeGroupId,
-                    'consume_type' => 1, // ITEM
-                    'target_id' => $material->item_id,
-                    'quantity' => $material->quantity,
-                    'param1' => 0,
-                    'param2' => 0,
-                    'extra_data' => null,
-                    'created_at' => now(),
-                    'updated_at' => now(),
-                ]);
-                echo "    - 添加材料消耗: 物品ID {$material->item_id}, 数量 {$material->quantity}\n";
-            }
-            
-            // 3. 添加货币消耗项
-            if ($recipe->coin_cost) {
-                $coinCost = json_decode($recipe->coin_cost, true);
-                if (is_array($coinCost)) {
-                    foreach ($coinCost as $currency => $amount) {
-                        $fundConfigId = getFundConfigId($currency);
-                        if ($fundConfigId) {
-                            DB::table('kku_game_consume_items')->insert([
-                                'group_id' => $consumeGroupId,
-                                'consume_type' => 2, // FUND_CONFIG
-                                'target_id' => $fundConfigId,
-                                'quantity' => $amount,
-                                'param1' => 0,
-                                'param2' => 0,
-                                'extra_data' => null,
-                                'created_at' => now(),
-                                'updated_at' => now(),
-                            ]);
-                            echo "    - 添加货币消耗: {$currency} {$amount}\n";
-                        }
-                    }
-                }
-            }
-            
-            // 4. 创建奖励组
-            $rewardGroupId = DB::table('kku_game_reward_groups')->insertGetId([
-                'name' => "合成奖励: {$recipe->name}",
-                'code' => "craft_reward_{$recipe->id}",
-                'description' => "配方 {$recipe->name} 的奖励组",
-                'is_random' => false,
-                'random_count' => 1,
-                'reward_mode' => 1,
-                'created_at' => now(),
-                'updated_at' => now(),
-            ]);
-            
-            echo "  - 创建奖励组 ID: {$rewardGroupId}\n";
-            
-            // 5. 添加物品奖励项
-            DB::table('kku_game_reward_items')->insert([
-                'group_id' => $rewardGroupId,
-                'reward_type' => 1, // ITEM
-                'target_id' => $recipe->result_item_id,
-                'param1' => $recipe->result_min_quantity,
-                'param2' => $recipe->result_max_quantity,
-                'quantity' => $recipe->result_min_quantity,
-                'weight' => 1.0,
-                'probability' => $recipe->success_rate,
-                'is_guaranteed' => $recipe->success_rate >= 100 ? true : false,
-                'extra_data' => null,
-                'created_at' => now(),
-                'updated_at' => now(),
-            ]);
-            
-            echo "    - 添加物品奖励: 物品ID {$recipe->result_item_id}, 数量 {$recipe->result_min_quantity}-{$recipe->result_max_quantity}, 成功率 {$recipe->success_rate}%\n";
-            
-            // 6. 更新配方记录
-            DB::table('kku_item_recipes')
-                ->where('id', $recipe->id)
-                ->update([
-                    'consume_group_id' => $consumeGroupId,
-                    'reward_group_id' => $rewardGroupId,
-                    'updated_at' => now(),
-                ]);
-            
-            echo "  - 配方 {$recipe->name} 迁移完成\n\n";
-        }
-    });
-    
-    echo "批量迁移完成!\n";
-    
-} catch (Exception $e) {
-    echo "迁移失败: " . $e->getMessage() . "\n";
-    echo "堆栈跟踪:\n" . $e->getTraceAsString() . "\n";
-}
-
-/**
- * 获取货币对应的fund_config_id
- */
-function getFundConfigId($currency)
-{
-    $mapping = [
-        'gold' => 1,    // 金币
-        'silver' => 2,  // 银币
-        'copper' => 3,  // 铜币
-    ];
-
-    return $mapping[$currency] ?? null;
-}

+ 0 - 192
database/migrations/migrate_craft_to_group_system.php

@@ -1,192 +0,0 @@
-<?php
-
-use Illuminate\Database\Migrations\Migration;
-use Illuminate\Support\Facades\DB;
-use App\Module\Game\Models\GameConsumeGroup;
-use App\Module\Game\Models\GameConsumeItem;
-use App\Module\Game\Models\GameRewardGroup;
-use App\Module\Game\Models\GameRewardItem;
-use App\Module\Game\Enums\CONSUME_TYPE;
-use App\Module\Game\Enums\REWARD_TYPE;
-
-/**
- * 将物品合成系统从传统模式迁移到组系统模式
- */
-return new class extends Migration
-{
-    /**
-     * 执行迁移
-     */
-    public function up()
-    {
-        DB::transaction(function () {
-            // 获取所有配方
-            $recipes = DB::table('kku_item_recipes')->get();
-            
-            foreach ($recipes as $recipe) {
-                echo "处理配方: {$recipe->name} (ID: {$recipe->id})\n";
-                
-                // 1. 创建消耗组
-                $consumeGroup = $this->createConsumeGroup($recipe);
-                
-                // 2. 创建奖励组
-                $rewardGroup = $this->createRewardGroup($recipe);
-                
-                // 3. 更新配方记录
-                DB::table('kku_item_recipes')
-                    ->where('id', $recipe->id)
-                    ->update([
-                        'consume_group_id' => $consumeGroup->id,
-                        'reward_group_id' => $rewardGroup->id,
-                        'updated_at' => now(),
-                    ]);
-                
-                echo "配方 {$recipe->name} 迁移完成\n";
-            }
-        });
-    }
-
-    /**
-     * 创建消耗组
-     */
-    private function createConsumeGroup($recipe)
-    {
-        // 创建消耗组
-        $consumeGroup = GameConsumeGroup::create([
-            'name' => "合成消耗: {$recipe->name}",
-            'code' => "craft_consume_{$recipe->id}",
-            'description' => "配方 {$recipe->name} 的消耗组",
-        ]);
-
-        // 添加材料消耗项
-        $materials = DB::table('kku_item_recipe_materials')
-            ->where('recipe_id', $recipe->id)
-            ->get();
-
-        foreach ($materials as $material) {
-            GameConsumeItem::create([
-                'group_id' => $consumeGroup->id,
-                'consume_type' => CONSUME_TYPE::ITEM->value,
-                'target_id' => $material->item_id,
-                'quantity' => $material->quantity,
-                'param1' => 0,
-                'param2' => 0,
-                'extra_data' => null,
-            ]);
-        }
-
-        // 添加货币消耗项
-        if ($recipe->coin_cost) {
-            $coinCost = json_decode($recipe->coin_cost, true);
-            if (is_array($coinCost)) {
-                foreach ($coinCost as $currency => $amount) {
-                    // 根据货币类型获取对应的fund_config_id
-                    $fundConfigId = $this->getFundConfigId($currency);
-                    if ($fundConfigId) {
-                        GameConsumeItem::create([
-                            'group_id' => $consumeGroup->id,
-                            'consume_type' => CONSUME_TYPE::FUND_CONFIG->value,
-                            'target_id' => $fundConfigId,
-                            'quantity' => $amount,
-                            'param1' => 0,
-                            'param2' => 0,
-                            'extra_data' => null,
-                        ]);
-                    }
-                }
-            }
-        }
-
-        return $consumeGroup;
-    }
-
-    /**
-     * 创建奖励组
-     */
-    private function createRewardGroup($recipe)
-    {
-        // 创建奖励组
-        $rewardGroup = GameRewardGroup::create([
-            'name' => "合成奖励: {$recipe->name}",
-            'code' => "craft_reward_{$recipe->id}",
-            'description' => "配方 {$recipe->name} 的奖励组",
-            'is_random' => false,
-            'random_count' => 1,
-            'reward_mode' => 1, // 权重选择模式
-        ]);
-
-        // 添加物品奖励项
-        GameRewardItem::create([
-            'group_id' => $rewardGroup->id,
-            'reward_type' => REWARD_TYPE::ITEM->value,
-            'target_id' => $recipe->result_item_id,
-            'param1' => $recipe->result_min_quantity,
-            'param2' => $recipe->result_max_quantity,
-            'quantity' => $recipe->result_min_quantity, // 基础数量
-            'weight' => 1.0,
-            'probability' => $recipe->success_rate, // 成功率作为概率
-            'is_guaranteed' => $recipe->success_rate >= 100 ? true : false,
-            'extra_data' => null,
-        ]);
-
-        return $rewardGroup;
-    }
-
-    /**
-     * 获取货币对应的fund_config_id
-     */
-    private function getFundConfigId($currency)
-    {
-        $mapping = [
-            'gold' => 1,    // 金币
-            'silver' => 2,  // 银币
-            'copper' => 3,  // 铜币
-            // 根据实际情况添加更多映射
-        ];
-
-        return $mapping[$currency] ?? null;
-    }
-
-    /**
-     * 回滚迁移
-     */
-    public function down()
-    {
-        DB::transaction(function () {
-            // 获取所有配方
-            $recipes = DB::table('kku_item_recipes')->get();
-            
-            foreach ($recipes as $recipe) {
-                // 删除消耗组和相关项
-                if ($recipe->consume_group_id) {
-                    DB::table('kku_game_consume_items')
-                        ->where('group_id', $recipe->consume_group_id)
-                        ->delete();
-                    DB::table('kku_game_consume_groups')
-                        ->where('id', $recipe->consume_group_id)
-                        ->delete();
-                }
-                
-                // 删除奖励组和相关项
-                if ($recipe->reward_group_id) {
-                    DB::table('kku_game_reward_items')
-                        ->where('group_id', $recipe->reward_group_id)
-                        ->delete();
-                    DB::table('kku_game_reward_groups')
-                        ->where('id', $recipe->reward_group_id)
-                        ->delete();
-                }
-                
-                // 清空组系统字段
-                DB::table('kku_item_recipes')
-                    ->where('id', $recipe->id)
-                    ->update([
-                        'consume_group_id' => null,
-                        'reward_group_id' => null,
-                        'condition_group_id' => null,
-                        'updated_at' => now(),
-                    ]);
-            }
-        });
-    }
-};

+ 0 - 126
migrate_all_recipes.sql

@@ -1,126 +0,0 @@
--- 迁移所有配方到组系统模式
-
--- 配方ID=3: 金矿石冶炼
-INSERT INTO kku_game_consume_groups (name, code, description, created_at, updated_at) 
-VALUES ('合成消耗: 金矿石冶炼', 'craft_consume_3', '配方 金矿石冶炼 的消耗组', NOW(), NOW());
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, item_id, quantity, 0, 0, NULL, NOW(), NOW()
-FROM kku_item_recipe_materials WHERE recipe_id = 3;
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-VALUES (LAST_INSERT_ID(), 2, 1, 10, 0, 0, NULL, NOW(), NOW());
-
-SET @consume_group_3 = LAST_INSERT_ID();
-
-INSERT INTO kku_game_reward_groups (name, code, description, is_random, random_count, reward_mode, created_at, updated_at)
-VALUES ('合成奖励: 金矿石冶炼', 'craft_reward_3', '配方 金矿石冶炼 的奖励组', 0, 1, 1, NOW(), NOW());
-
-INSERT INTO kku_game_reward_items (group_id, reward_type, target_id, param1, param2, quantity, weight, probability, is_guaranteed, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, result_item_id, result_min_quantity, result_max_quantity, result_min_quantity, 1.0, success_rate, 
-       CASE WHEN success_rate >= 100 THEN 1 ELSE 0 END, NULL, NOW(), NOW()
-FROM kku_item_recipes WHERE id = 3;
-
-SET @reward_group_3 = LAST_INSERT_ID();
-
-UPDATE kku_item_recipes SET consume_group_id = @consume_group_3, reward_group_id = @reward_group_3, updated_at = NOW() WHERE id = 3;
-
--- 配方ID=4: 铁质工具箱制作
-INSERT INTO kku_game_consume_groups (name, code, description, created_at, updated_at) 
-VALUES ('合成消耗: 铁质工具箱制作', 'craft_consume_4', '配方 铁质工具箱制作 的消耗组', NOW(), NOW());
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, item_id, quantity, 0, 0, NULL, NOW(), NOW()
-FROM kku_item_recipe_materials WHERE recipe_id = 4;
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-VALUES (LAST_INSERT_ID(), 2, 1, 20, 0, 0, NULL, NOW(), NOW());
-
-SET @consume_group_4 = LAST_INSERT_ID();
-
-INSERT INTO kku_game_reward_groups (name, code, description, is_random, random_count, reward_mode, created_at, updated_at)
-VALUES ('合成奖励: 铁质工具箱制作', 'craft_reward_4', '配方 铁质工具箱制作 的奖励组', 0, 1, 1, NOW(), NOW());
-
-INSERT INTO kku_game_reward_items (group_id, reward_type, target_id, param1, param2, quantity, weight, probability, is_guaranteed, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, result_item_id, result_min_quantity, result_max_quantity, result_min_quantity, 1.0, success_rate, 
-       CASE WHEN success_rate >= 100 THEN 1 ELSE 0 END, NULL, NOW(), NOW()
-FROM kku_item_recipes WHERE id = 4;
-
-SET @reward_group_4 = LAST_INSERT_ID();
-
-UPDATE kku_item_recipes SET consume_group_id = @consume_group_4, reward_group_id = @reward_group_4, updated_at = NOW() WHERE id = 4;
-
--- 配方ID=5: 高级肥料制作
-INSERT INTO kku_game_consume_groups (name, code, description, created_at, updated_at) 
-VALUES ('合成消耗: 高级肥料制作', 'craft_consume_5', '配方 高级肥料制作 的消耗组', NOW(), NOW());
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, item_id, quantity, 0, 0, NULL, NOW(), NOW()
-FROM kku_item_recipe_materials WHERE recipe_id = 5;
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-VALUES (LAST_INSERT_ID(), 2, 1, 15, 0, 0, NULL, NOW(), NOW());
-
-SET @consume_group_5 = LAST_INSERT_ID();
-
-INSERT INTO kku_game_reward_groups (name, code, description, is_random, random_count, reward_mode, created_at, updated_at)
-VALUES ('合成奖励: 高级肥料制作', 'craft_reward_5', '配方 高级肥料制作 的奖励组', 0, 1, 1, NOW(), NOW());
-
-INSERT INTO kku_game_reward_items (group_id, reward_type, target_id, param1, param2, quantity, weight, probability, is_guaranteed, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, result_item_id, result_min_quantity, result_max_quantity, result_min_quantity, 1.0, success_rate, 
-       CASE WHEN success_rate >= 100 THEN 1 ELSE 0 END, NULL, NOW(), NOW()
-FROM kku_item_recipes WHERE id = 5;
-
-SET @reward_group_5 = LAST_INSERT_ID();
-
-UPDATE kku_item_recipes SET consume_group_id = @consume_group_5, reward_group_id = @reward_group_5, updated_at = NOW() WHERE id = 5;
-
--- 配方ID=6: 木板制作
-INSERT INTO kku_game_consume_groups (name, code, description, created_at, updated_at) 
-VALUES ('合成消耗: 木板制作', 'craft_consume_6', '配方 木板制作 的消耗组', NOW(), NOW());
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, item_id, quantity, 0, 0, NULL, NOW(), NOW()
-FROM kku_item_recipe_materials WHERE recipe_id = 6;
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-VALUES (LAST_INSERT_ID(), 2, 1, 2, 0, 0, NULL, NOW(), NOW());
-
-SET @consume_group_6 = LAST_INSERT_ID();
-
-INSERT INTO kku_game_reward_groups (name, code, description, is_random, random_count, reward_mode, created_at, updated_at)
-VALUES ('合成奖励: 木板制作', 'craft_reward_6', '配方 木板制作 的奖励组', 0, 1, 1, NOW(), NOW());
-
-INSERT INTO kku_game_reward_items (group_id, reward_type, target_id, param1, param2, quantity, weight, probability, is_guaranteed, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, result_item_id, result_min_quantity, result_max_quantity, result_min_quantity, 1.0, success_rate, 
-       CASE WHEN success_rate >= 100 THEN 1 ELSE 0 END, NULL, NOW(), NOW()
-FROM kku_item_recipes WHERE id = 6;
-
-SET @reward_group_6 = LAST_INSERT_ID();
-
-UPDATE kku_item_recipes SET consume_group_id = @consume_group_6, reward_group_id = @reward_group_6, updated_at = NOW() WHERE id = 6;
-
--- 配方ID=7: 高级木材加工
-INSERT INTO kku_game_consume_groups (name, code, description, created_at, updated_at) 
-VALUES ('合成消耗: 高级木材加工', 'craft_consume_7', '配方 高级木材加工 的消耗组', NOW(), NOW());
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, item_id, quantity, 0, 0, NULL, NOW(), NOW()
-FROM kku_item_recipe_materials WHERE recipe_id = 7;
-
-INSERT INTO kku_game_consume_items (group_id, consume_type, target_id, quantity, param1, param2, extra_data, created_at, updated_at)
-VALUES (LAST_INSERT_ID(), 2, 1, 8, 0, 0, NULL, NOW(), NOW());
-
-SET @consume_group_7 = LAST_INSERT_ID();
-
-INSERT INTO kku_game_reward_groups (name, code, description, is_random, random_count, reward_mode, created_at, updated_at)
-VALUES ('合成奖励: 高级木材加工', 'craft_reward_7', '配方 高级木材加工 的奖励组', 0, 1, 1, NOW(), NOW());
-
-INSERT INTO kku_game_reward_items (group_id, reward_type, target_id, param1, param2, quantity, weight, probability, is_guaranteed, extra_data, created_at, updated_at)
-SELECT LAST_INSERT_ID(), 1, result_item_id, result_min_quantity, result_max_quantity, result_min_quantity, 1.0, success_rate, 
-       CASE WHEN success_rate >= 100 THEN 1 ELSE 0 END, NULL, NOW(), NOW()
-FROM kku_item_recipes WHERE id = 7;
-
-SET @reward_group_7 = LAST_INSERT_ID();
-
-UPDATE kku_item_recipes SET consume_group_id = @consume_group_7, reward_group_id = @reward_group_7, updated_at = NOW() WHERE id = 7;

+ 0 - 161
migrate_craft_system.php

@@ -1,161 +0,0 @@
-<?php
-
-require_once __DIR__ . '/vendor/autoload.php';
-
-// 启动Laravel应用
-$app = require_once __DIR__ . '/bootstrap/app.php';
-$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
-$kernel->bootstrap();
-
-use Illuminate\Support\Facades\DB;
-use App\Module\Game\Models\GameConsumeGroup;
-use App\Module\Game\Models\GameConsumeItem;
-use App\Module\Game\Models\GameRewardGroup;
-use App\Module\Game\Models\GameRewardItem;
-use App\Module\Game\Enums\CONSUME_TYPE;
-use App\Module\Game\Enums\REWARD_TYPE;
-
-echo "开始迁移物品合成系统到组系统模式...\n";
-
-try {
-    DB::transaction(function () {
-        // 获取所有配方
-        $recipes = DB::table('kku_item_recipes')->get();
-
-        echo "找到 " . count($recipes) . " 个配方需要迁移\n";
-
-        foreach ($recipes as $recipe) {
-            echo "处理配方: {$recipe->name} (ID: {$recipe->id})\n";
-
-            // 1. 创建消耗组
-            $consumeGroup = createConsumeGroup($recipe);
-            echo "  - 创建消耗组: {$consumeGroup->name} (ID: {$consumeGroup->id})\n";
-
-            // 2. 创建奖励组
-            $rewardGroup = createRewardGroup($recipe);
-            echo "  - 创建奖励组: {$rewardGroup->name} (ID: {$rewardGroup->id})\n";
-
-            // 3. 更新配方记录
-            DB::table('kku_item_recipes')
-                ->where('id', $recipe->id)
-                ->update([
-                    'consume_group_id' => $consumeGroup->id,
-                    'reward_group_id' => $rewardGroup->id,
-                    'updated_at' => now(),
-                ]);
-
-            echo "  - 配方 {$recipe->name} 迁移完成\n\n";
-        }
-    });
-
-    echo "迁移完成!\n";
-
-} catch (Exception $e) {
-    echo "迁移失败: " . $e->getMessage() . "\n";
-    echo "堆栈跟踪:\n" . $e->getTraceAsString() . "\n";
-}
-
-/**
- * 创建消耗组
- */
-function createConsumeGroup($recipe)
-{
-    // 创建消耗组
-    $consumeGroup = GameConsumeGroup::create([
-        'name' => "合成消耗: {$recipe->name}",
-        'code' => "craft_consume_{$recipe->id}",
-        'description' => "配方 {$recipe->name} 的消耗组",
-    ]);
-
-    // 添加材料消耗项
-    $materials = DB::table('kku_item_recipe_materials')
-        ->where('recipe_id', $recipe->id)
-        ->get();
-
-    foreach ($materials as $material) {
-        GameConsumeItem::create([
-            'group_id' => $consumeGroup->id,
-            'consume_type' => CONSUME_TYPE::ITEM->value,
-            'target_id' => $material->item_id,
-            'quantity' => $material->quantity,
-            'param1' => 0,
-            'param2' => 0,
-            'extra_data' => null,
-        ]);
-        echo "    - 添加材料消耗: 物品ID {$material->item_id}, 数量 {$material->quantity}\n";
-    }
-
-    // 添加货币消耗项
-    if ($recipe->coin_cost) {
-        $coinCost = json_decode($recipe->coin_cost, true);
-        if (is_array($coinCost)) {
-            foreach ($coinCost as $currency => $amount) {
-                // 根据货币类型获取对应的fund_config_id
-                $fundConfigId = getFundConfigId($currency);
-                if ($fundConfigId) {
-                    GameConsumeItem::create([
-                        'group_id' => $consumeGroup->id,
-                        'consume_type' => CONSUME_TYPE::FUND_CONFIG->value,
-                        'target_id' => $fundConfigId,
-                        'quantity' => $amount,
-                        'param1' => 0,
-                        'param2' => 0,
-                        'extra_data' => null,
-                    ]);
-                    echo "    - 添加货币消耗: {$currency} {$amount}\n";
-                }
-            }
-        }
-    }
-
-    return $consumeGroup;
-}
-
-/**
- * 创建奖励组
- */
-function createRewardGroup($recipe)
-{
-    // 创建奖励组
-    $rewardGroup = GameRewardGroup::create([
-        'name' => "合成奖励: {$recipe->name}",
-        'code' => "craft_reward_{$recipe->id}",
-        'description' => "配方 {$recipe->name} 的奖励组",
-        'is_random' => false,
-        'random_count' => 1,
-        'reward_mode' => 1, // 权重选择模式
-    ]);
-
-    // 添加物品奖励项
-    GameRewardItem::create([
-        'group_id' => $rewardGroup->id,
-        'reward_type' => REWARD_TYPE::ITEM->value,
-        'target_id' => $recipe->result_item_id,
-        'param1' => $recipe->result_min_quantity,
-        'param2' => $recipe->result_max_quantity,
-        'quantity' => $recipe->result_min_quantity, // 基础数量
-        'weight' => 1.0,
-        'probability' => $recipe->success_rate, // 成功率作为概率
-        'is_guaranteed' => $recipe->success_rate >= 100 ? true : false,
-        'extra_data' => null,
-    ]);
-
-    echo "    - 添加物品奖励: 物品ID {$recipe->result_item_id}, 数量 {$recipe->result_min_quantity}-{$recipe->result_max_quantity}, 成功率 {$recipe->success_rate}%\n";
-
-    return $rewardGroup;
-}
-
-/**
- * 获取货币对应的fund_config_id
- */
-function getFundConfigId($currency)
-{
-    $mapping = [
-        'gold' => 1,    // 金币
-        'silver' => 2,  // 银币
-        'copper' => 3,  // 铜币
-        // 根据实际情况添加更多映射
-    ];
-
-    return $mapping[$currency] ?? null;
-}