0005_resourcemapping.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # Generated by Django 5.2.8 on 2025-12-19 09:37
  2. from concurrent.futures import ThreadPoolExecutor
  3. import uuid_utils.compat
  4. from django.db import migrations, models
  5. from django.db.models import QuerySet
  6. from knowledge.models import Knowledge
  7. def get_initialization_resource_mapping():
  8. from django.db.models import QuerySet
  9. from application.flow.tools import get_workflow_resource, get_node_handle_callback, \
  10. get_instance_resource
  11. from system_manage.models.resource_mapping import ResourceType
  12. from application.models import Application
  13. from knowledge.models import KnowledgeWorkflow
  14. from application.flow.tools import application_instance_field_call_dict, knowledge_instance_field_call_dict
  15. from application.models.application import ApplicationKnowledgeMapping
  16. from system_manage.models.resource_mapping import ResourceMapping
  17. resource_mapping_list = []
  18. ids = list(Application.objects.values_list('id', flat=True))
  19. for app_id in ids:
  20. try:
  21. application = Application.objects.get(id=app_id)
  22. workflow_mapping = get_workflow_resource(application.work_flow,
  23. get_node_handle_callback(ResourceType.APPLICATION,
  24. application.id))
  25. instance_mapping = get_instance_resource(application, ResourceType.APPLICATION, str(application.id),
  26. application_instance_field_call_dict)
  27. resource_mapping_list += workflow_mapping
  28. resource_mapping_list += instance_mapping
  29. except:
  30. pass
  31. knowledge_ids = list(Knowledge.objects.values_list('id', flat=True))
  32. for knowledge_id in knowledge_ids:
  33. try:
  34. knowledge = Knowledge.objects.get(id=knowledge_id)
  35. if knowledge.type == 4:
  36. knowledge_workflow = QuerySet(KnowledgeWorkflow).filter(knowledge_id=knowledge_id).first()
  37. if knowledge_workflow:
  38. workflow_mapping = get_workflow_resource(knowledge_workflow.work_flow,
  39. get_node_handle_callback(ResourceType.KNOWLEDGE,
  40. str(knowledge_workflow.knowledge_id)))
  41. resource_mapping_list += workflow_mapping
  42. instance_mapping = get_instance_resource(knowledge, ResourceType.KNOWLEDGE, str(knowledge.id),
  43. knowledge_instance_field_call_dict)
  44. resource_mapping_list += instance_mapping
  45. except:
  46. pass
  47. application_knowledge_mapping = [
  48. ResourceMapping(source_type=ResourceType.APPLICATION, target_type=ResourceType.KNOWLEDGE,
  49. source_id=str(akm.application_id), target_id=str(akm.knowledge_id)) for akm in
  50. QuerySet(ApplicationKnowledgeMapping).all()]
  51. resource_mapping_list += application_knowledge_mapping
  52. return {(str(item.target_type) + str(item.target_id) + str(item.source_type) + str(item.source_id)): item for item
  53. in resource_mapping_list}.values()
  54. def resource_mapping(apps, schema_editor):
  55. from system_manage.models.resource_mapping import ResourceMapping
  56. with ThreadPoolExecutor(max_workers=3) as executor:
  57. future = executor.submit(get_initialization_resource_mapping)
  58. resource_mapping_list = future.result()
  59. QuerySet(ResourceMapping).bulk_create(resource_mapping_list)
  60. class Migration(migrations.Migration):
  61. dependencies = [
  62. ('system_manage', '0004_alter_systemsetting_type_and_more'),
  63. ('knowledge', '0007_remove_knowledgeworkflowversion_workflow_and_more'),
  64. ('application', '0003_application_stt_model_params_setting_and_more'),
  65. ]
  66. operations = [
  67. migrations.CreateModel(
  68. name='ResourceMapping',
  69. fields=[
  70. ('create_time', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='创建时间')),
  71. ('update_time', models.DateTimeField(auto_now=True, db_index=True, verbose_name='修改时间')),
  72. ('id',
  73. models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False,
  74. verbose_name='主键id')),
  75. ('source_type', models.CharField(
  76. choices=[('KNOWLEDGE', '知识库'), ('APPLICATION', '应用'), ('TOOL', '工具'), ('MODEL', '模型')],
  77. db_index=True, verbose_name='关联资源类型')),
  78. ('target_type', models.CharField(
  79. choices=[('KNOWLEDGE', '知识库'), ('APPLICATION', '应用'), ('TOOL', '工具'), ('MODEL', '模型')],
  80. db_index=True, verbose_name='被关联资源类型')),
  81. ('source_id', models.CharField(db_index=True, max_length=128, verbose_name='关联资源id')),
  82. ('target_id', models.CharField(db_index=True, max_length=128, verbose_name='被关联资源id')),
  83. ],
  84. options={
  85. 'db_table': 'resource_mapping',
  86. },
  87. ),
  88. migrations.RunPython(resource_mapping, atomic=False)
  89. ]