Kaynağa Gözat

添加问题件迁移文件
修改order_id为唯一字段

ajun 5 yıl önce
ebeveyn
işleme
0c5c35b9b1

+ 84 - 0
database/migrations/2020_12_22_143202_change_column_order_id_to_order_issues.php

@@ -0,0 +1,84 @@
+<?php
+
+use App\OrderIssue;
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class ChangeColumnOrderIdToOrderIssues extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        $this->cleanOrderIssueRepeat();
+        Schema::table('order_issues', function (Blueprint $table) {
+            $table->integer('order_id')->unique('order_issues_order_id_unique')->change();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_issues', function (Blueprint $table) {
+            $table->dropUnique('order_issues_order_id_unique');
+        });
+    }
+
+    public function cleanOrderIssueRepeat()
+    {
+        ini_set('max_execution_time', 6500);
+        ini_set('memory_limit', '1526M');
+        for ($i = 0; true; $i++) {
+            $orderIssue_unique = \App\OrderIssue::withTrashed()
+                ->selectRaw('count(1) as count,id,order_id')
+                ->whereNotNull('order_id')
+                ->orderByDesc('created_at')
+                ->groupBy('order_id')
+                ->having('count', '>', 1)
+                ->limit(100)
+                ->get();
+            if ($orderIssue_unique->count() == 0) return;
+            foreach ($orderIssue_unique as $item) {
+                $orderIssue_delete = OrderIssue::withTrashed()->where('order_id', $item->order_id)->get();
+                /** @var OrderIssue $order_issue_unique */
+                $order_issue_unique = $orderIssue_delete->whereNull('deleted_at')->first();
+                if(!$order_issue_unique) $order_issue_unique = $orderIssue_delete->first();
+                $ids = [];
+                foreach ($orderIssue_delete as $key => $order_issue) {
+                    if ($order_issue->id == $order_issue_unique->id) continue;
+                    $ids[] = $order_issue->id;
+                    if ($order_issue['rejecting_status'] != '未退回') $order_issue_unique['rejecting_status'] = $order_issue['rejecting_status'];
+                    if ($order_issue['situation_explain']) $order_issue_unique['situation_explain'] = $order_issue['situation_explain'];
+                    if ($order_issue['order_issue_type_id']) $order_issue_unique['order_issue_type_id'] = $order_issue['order_issue_type_id'];
+                    if ($order_issue['second_order_id']) $order_issue_unique['second_order_id'] = $order_issue['second_order_id'];
+                    if ($order_issue['is_new_rejecting'] != '无') $order_issue_unique['is_new_rejecting'] = $order_issue['is_new_rejecting'];
+                    if ($order_issue['second_client_no']) $order_issue_unique['second_client_no'] = $order_issue['second_client_no'];
+                    if ($order_issue['final_status']) $order_issue_unique['final_status'] = $order_issue['final_status'];
+                    if ($order_issue['logistic_indemnity_money']) $order_issue_unique['logistic_indemnity_money'] = $order_issue['logistic_indemnity_money'];
+                    if ($order_issue['logistic_express_remission']) $order_issue_unique['logistic_express_remission'] = $order_issue['logistic_express_remission'];
+                    if ($order_issue['baoshi_indemnity_money']) $order_issue_unique['baoshi_indemnity_money'] = $order_issue['baoshi_indemnity_money'];
+                    if ($order_issue['baoshi_express_remission']) $order_issue_unique['baoshi_express_remission'] = $order_issue['baoshi_express_remission'];
+                    if ($order_issue['user_workgroup_id']) $order_issue_unique['user_workgroup_id'] = $order_issue['user_workgroup_id'];
+                    if ($order_issue['custom_code']) $order_issue_unique['custom_code'] = $order_issue['custom_code'];
+                    if ($order_issue['imported_status']) $order_issue_unique['imported_status'] = $order_issue['imported_status'];
+                }
+                if ($order_issue_unique['deleted_at']) $order_issue_unique['deleted_at'] = null;
+                $order_issue_unique->save();
+                $order_issue_unique->同步退单状态();
+                OrderIssue:: withTrashed()->whereIn('id', $ids)->forceDelete();
+                app('LogService')->log(__METHOD__, __FUNCTION__, 'orders_toCombine:' . json_encode($order_issue_unique) . '|toBe OrderId: ' . json_encode($order_issue_unique->id));
+                $orderIssueProcessLogs = \App\OrderIssueProcessLog::query()->whereIn('order_issue_id', $ids)->get();
+                app('LogService')->log(__METHOD__, __FUNCTION__, 'delete order_issue processLogs:' . json_encode($orderIssueProcessLogs));
+                \App\OrderIssueProcessLog::query()->whereIn('order_issue_id', $ids)->forceDelete();
+            }
+        }
+    }
+}