From 1216f15e45734f4cc9c6bb3ce69ddd4979a2caef Mon Sep 17 00:00:00 2001
From: Bai <bugatti_it@163.com>
Date: Tue, 16 Mar 2021 20:17:13 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=96=B0=E6=97=A7?=
 =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=AF=B9=E4=BA=8Edefault=5Fnode=E8=8A=82?=
 =?UTF-8?q?=E7=82=B9=E5=8F=98=E6=9B=B4=E5=86=B2=E7=AA=81=E7=9A=84=E9=97=AE?=
 =?UTF-8?q?=E9=A2=98(=E6=97=A7=E7=89=88=E6=9C=AC=E4=BC=9A=E5=B0=86?=
 =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E8=BF=81=E7=A7=BB=E5=90=8E=E7=9A=84?=
 =?UTF-8?q?default=5Fnode=E8=8A=82=E7=82=B9=E7=9A=84key=E4=BF=AE=E6=94=B9?=
 =?UTF-8?q?=E4=B8=BA=E9=9D=9E1)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 apps/assets/apps.py                           |  14 --
 apps/assets/models/node.py                    | 151 +++++-------------
 .../migrations/0010_auto_20210219_1241.py     |   2 +-
 apps/orgs/models.py                           |   4 +-
 apps/perms/const.py                           |  10 --
 5 files changed, 47 insertions(+), 134 deletions(-)
 delete mode 100644 apps/perms/const.py

diff --git a/apps/assets/apps.py b/apps/assets/apps.py
index a7267c7b6..04ed9fded 100644
--- a/apps/assets/apps.py
+++ b/apps/assets/apps.py
@@ -1,16 +1,6 @@
 from __future__ import unicode_literals
 
 from django.apps import AppConfig
-from django.db.models.signals import post_migrate
-
-
-def initial_some_nodes():
-    from .models import Node
-    Node.initial_some_nodes()
-
-
-def initial_some_nodes_callback(sender, **kwargs):
-    initial_some_nodes()
 
 
 class AssetsConfig(AppConfig):
@@ -19,7 +9,3 @@ class AssetsConfig(AppConfig):
     def ready(self):
         super().ready()
         from . import signals_handler
-        try:
-            initial_some_nodes()
-        except Exception:
-            post_migrate.connect(initial_some_nodes_callback, sender=self)
diff --git a/apps/assets/models/node.py b/apps/assets/models/node.py
index d2a8c3ccf..ad17a8be9 100644
--- a/apps/assets/models/node.py
+++ b/apps/assets/models/node.py
@@ -465,44 +465,6 @@ class SomeNodesMixin:
     empty_key = '-11'
     empty_value = _("empty")
 
-    @classmethod
-    def correct_default_node_if_need(cls):
-        with tmp_to_root_org():
-            wrong_default_org = cls.objects.filter(key='1', value='Default').first()
-            if not wrong_default_org:
-                return
-
-            if wrong_default_org.has_children_or_has_assets():
-                return
-
-            default_org = Organization.default()
-            right_default_org = cls.objects.filter(value=default_org.name).first()
-            if not right_default_org:
-                return
-
-            if right_default_org.date_create > wrong_default_org.date_create:
-                return
-
-            with atomic():
-                logger.warn(f'Correct default node: '
-                            f'old={wrong_default_org.value}-{wrong_default_org.key} '
-                            f'new={right_default_org.value}-{right_default_org.key}')
-                wrong_default_org.delete()
-                right_default_org.key = '1'
-                right_default_org.save()
-
-    @classmethod
-    def default_node(cls):
-        cls.correct_default_node_if_need()
-
-        default_org = Organization.default()
-        with tmp_to_org(default_org):
-            defaults = {'value': default_org.name}
-            obj, created = cls.objects.get_or_create(
-                defaults=defaults, key=cls.default_key,
-            )
-            return obj
-
     def is_default_node(self):
         return self.key == self.default_key
 
@@ -513,15 +475,36 @@ class SomeNodesMixin:
             return False
 
     @classmethod
-    def get_next_org_root_node_key(cls):
-        with tmp_to_org(Organization.root()):
-            org_nodes_roots = cls.objects.filter(key__regex=r'^[0-9]+$')
-            org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True)
-            if not org_nodes_roots_keys:
-                org_nodes_roots_keys = ['1']
-            max_key = max([int(k) for k in org_nodes_roots_keys])
-            key = str(max_key + 1) if max_key > 0 else '2'
-            return key
+    def org_root(cls):
+        # 如果使用current_org 在set_current_org时会死循环
+        ori_org = get_current_org()
+
+        if ori_org and ori_org.is_default():
+            return cls.default_node()
+
+        if ori_org and ori_org.is_root():
+            return None
+
+        org_roots = cls.org_root_nodes()
+        org_roots_length = len(org_roots)
+
+        if org_roots_length == 1:
+            root = org_roots[0]
+            return root
+        elif org_roots_length == 0:
+            root = cls.create_org_root_node()
+            return root
+        else:
+            error = 'Current org {} root node not 1, get {}'.format(ori_org, org_roots_length)
+            raise ValueError(error)
+
+    @classmethod
+    def default_node(cls):
+        default_org = Organization.default()
+        with tmp_to_org(default_org):
+            defaults = {'value': default_org.name}
+            obj, created = cls.objects.get_or_create(defaults=defaults, key=cls.default_key)
+            return obj
 
     @classmethod
     def create_org_root_node(cls):
@@ -531,68 +514,22 @@ class SomeNodesMixin:
             root = cls.objects.create(key=key, value=ori_org.name)
             return root
 
+    @classmethod
+    def get_next_org_root_node_key(cls):
+        with tmp_to_root_org():
+            org_nodes_roots = cls.org_root_nodes()
+            org_nodes_roots_keys = org_nodes_roots.values_list('key', flat=True)
+            if not org_nodes_roots_keys:
+                org_nodes_roots_keys = ['1']
+            max_key = max([int(k) for k in org_nodes_roots_keys])
+            key = str(max_key + 1) if max_key > 0 else '2'
+            return key
+
     @classmethod
     def org_root_nodes(cls):
-        nodes = cls.objects.filter(parent_key='') \
-            .filter(key__regex=r'^[0-9]+$') \
-            .exclude(key__startswith='-') \
-            .order_by('key')
-        return nodes
-
-    @classmethod
-    def org_root(cls):
-        # 如果使用current_org 在set_current_org时会死循环
-        ori_org = get_current_org()
-
-        if ori_org and ori_org.is_default():
-            return cls.default_node()
-        if ori_org and ori_org.is_root():
-            return None
-
-        org_roots = cls.org_root_nodes()
-        org_roots_length = len(org_roots)
-
-        if org_roots_length == 1:
-            return org_roots[0]
-        elif org_roots_length == 0:
-            root = cls.create_org_root_node()
-            return root
-        else:
-            raise ValueError('Current org root node not 1, get {}'.format(org_roots_length))
-
-    @classmethod
-    def initial_some_nodes(cls):
-        cls.default_node()
-
-    @classmethod
-    def modify_other_org_root_node_key(cls):
-        """
-        解决创建 default 节点失败的问题,
-        因为在其他组织下存在 default 节点,故在 DEFAULT 组织下 get 不到 create 失败
-        """
-        logger.info("Modify other org root node key")
-
-        with tmp_to_org(Organization.root()):
-            node_key1 = cls.objects.filter(key='1').first()
-            if not node_key1:
-                logger.info("Not found node that `key` = 1")
-                return
-            if node_key1.org_id == '':
-                node_key1.org_id = str(Organization.default().id)
-                node_key1.save()
-                return
-
-        with transaction.atomic():
-            with tmp_to_org(node_key1.org):
-                org_root_node_new_key = cls.get_next_org_root_node_key()
-                for n in cls.objects.all():
-                    old_key = n.key
-                    key_list = n.key.split(':')
-                    key_list[0] = org_root_node_new_key
-                    new_key = ':'.join(key_list)
-                    n.key = new_key
-                    n.save()
-                    logger.info('Modify key ( {} > {} )'.format(old_key, new_key))
+        root_nodes = cls.objects.filter(parent_key='', key__regex=r'^[0-9]+$') \
+            .exclude(key__startswith='-').order_by('key')
+        return root_nodes
 
 
 class Node(OrgModelMixin, SomeNodesMixin, FamilyMixin, NodeAssetsMixin):
diff --git a/apps/orgs/migrations/0010_auto_20210219_1241.py b/apps/orgs/migrations/0010_auto_20210219_1241.py
index 9a9043f94..37b40e350 100644
--- a/apps/orgs/migrations/0010_auto_20210219_1241.py
+++ b/apps/orgs/migrations/0010_auto_20210219_1241.py
@@ -6,7 +6,7 @@ import sys
 from django.db import migrations
 
 
-default_id = '00000000-0000-0000-0000-000000000001'
+default_id = '00000000-0000-0000-0000-000000000002'
 
 
 def add_default_org(apps, schema_editor):
diff --git a/apps/orgs/models.py b/apps/orgs/models.py
index ac0830592..26f39c231 100644
--- a/apps/orgs/models.py
+++ b/apps/orgs/models.py
@@ -28,8 +28,8 @@ class Organization(models.Model):
 
     ROOT_ID = '00000000-0000-0000-0000-000000000000'
     ROOT_NAME = _('GLOBAL')
-    DEFAULT_ID = '00000000-0000-0000-0000-000000000001'
-    DEFAULT_NAME = 'DEFAULT'
+    DEFAULT_ID = '00000000-0000-0000-0000-000000000002'
+    DEFAULT_NAME = 'Default'
     orgs_mapping = None
 
     class Meta:
diff --git a/apps/perms/const.py b/apps/perms/const.py
deleted file mode 100644
index 476fc9d3f..000000000
--- a/apps/perms/const.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-from django.utils.translation import ugettext_lazy as _
-
-UNGROUPED_NODE_ID = "00000000-0000-0000-0000-000000000002"
-UNGROUPED_NODE_KEY = '-2'
-UNGROUPED_NODE_VALUE = _("Ungrouped")
-EMPTY_NODE_ID = "00000000-0000-0000-0000-000000000003"
-EMPTY_NODE_KEY = "-3"
-EMPTY_NODE_VALUE = _("Empty")