moshaorui 4 months ago
parent
commit
e432b15be3

+ 4 - 0
app/Admin/Actions/Grid/InitAppearance.php

@@ -5,6 +5,7 @@ namespace App\Admin\Actions\Grid;
 use App\Admin\Forms\InquiryAssignment as InquiryAssignmentForm;
 use App\Admin\Repositories\DistAdminDistributor;
 use App\Admin\Repositories\DistAppearance;
+use App\Admin\Repositories\DistAppearanceBak;
 use Dcat\Admin\Grid\BatchAction;
 use Dcat\Admin\Widgets\Modal;
 use Illuminate\Http\Request;
@@ -59,6 +60,9 @@ class InitAppearance extends BatchAction
             //初始化
             $row = DistAdminDistributor::getOneById($keys[0]);
             if ($row) {
+                //备份数据
+                DistAppearanceBak::backupData($row->appearance_id, $row->id);
+                //初始化主题
                 DistAppearance::initTheme($row->appearance_id, $row->id);
                 return $this->response()->success('Success')->refresh();
             }

+ 1 - 0
app/Admin/Controllers/DistAdminDistributorController.php

@@ -130,6 +130,7 @@ class DistAdminDistributorController extends AdminController
                     $newId = $form->getKey();
                     //初始化分销商
                     DistAdminDistributor::initDist($newId);
+                    return $form->response()->success(admin_trans_label('distributor_create_success'));
                 }
             });
         });

+ 33 - 0
app/Admin/Repositories/DistAppearanceBak.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Admin\Repositories;
+
+use App\Models\DistAppearanceBak as Model;
+use Dcat\Admin\Repositories\EloquentRepository;
+
+class DistAppearanceBak extends EloquentRepository
+{
+    /**
+     * Model.
+     *
+     * @var string
+     */
+    protected $eloquentClass = Model::class;
+
+    /*
+     * 备份数据
+     */
+    static public function backupData($appearanceId,$distId) {
+        $model = new Model();
+        return $model->backupData($appearanceId,$distId);
+    }
+
+
+    static public function restoreDataByVersion($version)
+    {
+        $model = new Model();
+        return $model->restoreDataByVersion($version);
+    }
+
+
+}

+ 126 - 0
app/Models/DistAppearanceBak.php

@@ -0,0 +1,126 @@
+<?php
+
+namespace App\Models;
+
+use Carbon\Carbon;
+use Dcat\Admin\Traits\HasDateTimeFormatter;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+
+class DistAppearanceBak extends Model
+{
+	use HasDateTimeFormatter;
+    protected $table = 'dist_appearance_bak';
+
+    protected $fillable = [
+        'original_table',
+        'data',
+        'created_at',
+        'updated_at',
+        'dist_id',
+        'appearance_id',
+        'version'
+    ];
+
+    /*
+     * 备份数据dist_appearance_template和dist_appearance_variable到dist_appearance_bak的data字段中
+     */
+    public static function backupData($appearanceId,$distId)
+    {
+        $version = generateVersionNumber();
+        // 获取需要备份的数据
+        $templates = DistAppearanceTemplate::where('dist_id', $distId)->where('appearance_id', $appearanceId)->get();
+        $variables = DistAppearanceVariable::where('dist_id', $distId)->where('appearance_id', $appearanceId)->get();
+
+        // 备份模板数据
+        foreach ($templates as $template) {
+            self::create([
+                'dist_id' => $distId,
+                'appearance_id' => $appearanceId,
+                'original_table' => 'dist_appearance_template',
+                'data' => json_encode($template->getAttributes()),
+                'created_at' => Carbon::now(),
+                'updated_at' => Carbon::now(),
+                'version' => $version
+            ]);
+        }
+
+        // 备份变量数据
+        foreach ($variables as $variable) {
+            self::create([
+                'dist_id' => $distId,
+                'appearance_id' => $appearanceId,
+                'original_table' => 'dist_appearance_variable',
+                'data' => json_encode($variable->getAttributes()),
+                'created_at' => Carbon::now(),
+                'updated_at' => Carbon::now(),
+                'version' => $version
+            ]);
+        }
+    }
+
+
+    /*
+     * 用于恢复指定版本的备份数据
+     * @param $version 版本号
+     */
+    public function restoreDataByVersion($version)
+    {
+        DB::beginTransaction();
+
+        try {
+            // Fetch all backup records with the specified version
+            $backupRecords = DistAppearanceBak::where('version', $version)->get();
+
+            // Group records by appearance_id and dist_id
+            $groupedRecords = [];
+            foreach ($backupRecords as $record) {
+                $key = "{$record->appearance_id}-{$record->dist_id}";
+                $groupedRecords[$key][] = $record;
+            }
+
+            // Process each group
+            foreach ($groupedRecords as $key => $records) {
+                list($appearanceId, $distId) = explode('-', $key);
+
+                // Delete existing records in dist_appearance_template
+                DB::table('dist_appearance_template')
+                    ->where('appearance_id', $appearanceId)
+                    ->where('dist_id', $distId)
+                    ->delete();
+
+                // Delete existing records in dist_appearance_variable
+                DB::table('dist_appearance_variable')
+                    ->where('appearance_id', $appearanceId)
+                    ->where('dist_id', $distId)
+                    ->delete();
+
+                // Insert backup data into original tables
+                foreach ($records as $record) {
+                    $originalTable = $record->original_table;
+                    $data = json_decode($record->data, true);
+
+                    if (!is_array($data)) {
+                        continue; // Skip if data is not an array
+                    }
+
+                    // Insert data into the original table
+                    DB::table($originalTable)->insert($data);
+                }
+            }
+
+            DB::commit();
+        } catch (\Exception $e) {
+            DB::rollback();
+            Log::error('Error restoring data: ' . $e->getMessage());
+            throw $e; // Rethrow or handle the exception as needed
+        }
+    }
+
+
+
+
+
+}

+ 1 - 0
lang/en/global.php

@@ -184,6 +184,7 @@ return [
         'country_lang_tips' => 'Please enter the language code, such as en ru es',
         'username_tips'=>'Login name',
         'name_tips'=>'Nickname',
+        'distributor_create_success' => 'Create successfully, please configure the distributor site!',
     ],
     'options' => [
         //

+ 1 - 0
lang/zh_CN/global.php

@@ -191,6 +191,7 @@ return [
         'country_lang_tips' => '请输入语言代码,如 en ru es',
         'username_tips'=>'登录名',
         'name_tips'=>'昵称',
+        'distributor_create_success' => '创建成功,请配置分销商站点!',
     ],
     'options' => [
         //