0005_taskrecord.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Generated by Django 5.2.9 on 2026-01-29 02:58
  2. import common.encoder.encoder
  3. import django.db.models.deletion
  4. import uuid_utils.compat
  5. from django.db import migrations, models
  6. old = [
  7. "https://apps-assets.fit2cloud.com/stable/maxkb/md2docx/logo.png",
  8. "https://apps-assets.fit2cloud.com/stable/maxkb/mcp_output/logo.png",
  9. "https://apps-assets.fit2cloud.com/stable/maxkb/feishubot/logo.png",
  10. "https://apps-assets.fit2cloud.com/stable/maxkb/mongo/logo.png",
  11. "https://apps-assets.fit2cloud.com/stable/maxkb/OFD_Parse/logo.png",
  12. "https://apps-assets.fit2cloud.com/stable/maxkb/html_to_pdf/logo.png",
  13. "https://apps-assets.fit2cloud.com/stable/maxkb/feishu_datasource/logo.png",
  14. "https://apps-assets.fit2cloud.com/stable/maxkb/quotation_generation_agent/logo.png",
  15. "https://apps-assets.fit2cloud.com/stable/maxkb/html2pdf/logo.png",
  16. "https://apps-assets.fit2cloud.com/stable/maxkb/sqlbot_ai/logo.png",
  17. "https://apps-assets.fit2cloud.com/stable/maxkb/metaso/logo.png",
  18. "https://apps-assets.fit2cloud.com/stable/maxkb/registry/logo.png",
  19. "https://apps-assets.fit2cloud.com/stable/maxkb/smtp_email/logo.png",
  20. "https://apps-assets.fit2cloud.com/stable/maxkb/wecomrobot/logo.png",
  21. "https://apps-assets.fit2cloud.com/stable/maxkb/paperx/logo.png",
  22. "https://apps-assets.fit2cloud.com/stable/maxkb/case_inquire/logo.png",
  23. "https://apps-assets.fit2cloud.com/stable/maxkb/data_analysis_assistant/logo.png",
  24. "https://apps-assets.fit2cloud.com/stable/maxkb/crm_intelligent_search/logo.png",
  25. "https://apps-assets.fit2cloud.com/stable/maxkb/case_collection/logo.png",
  26. "https://apps-assets.fit2cloud.com/stable/maxkb/knowledge_self_assessment/logo.png",
  27. "https://apps-assets.fit2cloud.com/stable/maxkb/minerU_util/logo.png",
  28. "https://apps-assets.fit2cloud.com/stable/maxkb/invoice_recognition/logo.png",
  29. "https://apps-assets.fit2cloud.com/stable/maxkb/fragment/logo.png",
  30. "https://apps-assets.fit2cloud.com/stable/maxkb/contract_review/logo.png",
  31. "https://apps-assets.fit2cloud.com/stable/maxkb/echart_to_svg/logo.png",
  32. "https://apps-assets.fit2cloud.com/stable/maxkb/extract/logo.png",
  33. "https://apps-assets.fit2cloud.com/stable/maxkb/big_order/logo.png",
  34. "https://apps-assets.fit2cloud.com/stable/maxkb/crm_intelligent_recording/logo.png",
  35. "https://apps-assets.fit2cloud.com/stable/maxkb/dingrobot/logo.png",
  36. "https://apps-assets.fit2cloud.com/stable/maxkb/timestamp/logo.png",
  37. "https://apps-assets.fit2cloud.com/stable/maxkb/knowledge_workflow/logo.png",
  38. "https://apps-assets.fit2cloud.com/stable/maxkb/household_registration_policy_qa_assistant/logo.png",
  39. "https://apps-assets.fit2cloud.com/stable/maxkb/httputils/logo.png",
  40. "https://apps-assets.fit2cloud.com/stable/maxkb/html_compression/logo.png",
  41. "https://apps-assets.fit2cloud.com/stable/maxkb/crm_customer_entry_ai_agent/logo.png",
  42. "https://apps-assets.fit2cloud.com/stable/maxkb/anspire/logo.png",
  43. "https://apps-assets.fit2cloud.com/stable/maxkb/application_template/logo.png",
  44. "https://apps-assets.fit2cloud.com/stable/maxkb/baidu-translate/logo.png",
  45. "https://apps-assets.fit2cloud.com/stable/maxkb/website_translation/logo.png",
  46. ]
  47. new = [
  48. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_md2docx/logo.png",
  49. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_mcp_output/logo.png",
  50. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_feishubot/logo.png",
  51. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_mongo/logo.png",
  52. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_OFD_Parse/logo.png",
  53. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_html_to_pdf/logo.png",
  54. "https://apps-assets.fit2cloud.com/stable/maxkb/db_feishu_datasource/logo.png",
  55. "https://apps-assets.fit2cloud.com/stable/maxkb/app_quotation_generation_agent/logo.png",
  56. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_html2pdf/logo.png",
  57. "https://apps-assets.fit2cloud.com/stable/maxkb/app_sqlbot_ai/logo.png",
  58. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_metaso/logo.png",
  59. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_registry/logo.png",
  60. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_smtp_email/logo.png",
  61. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_wecomrobot/logo.png",
  62. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_paperx/logo.png",
  63. "https://apps-assets.fit2cloud.com/stable/maxkb/app_case_inquire/logo.png",
  64. "https://apps-assets.fit2cloud.com/stable/maxkb/app_data_analysis_assistant/logo.png",
  65. "https://apps-assets.fit2cloud.com/stable/maxkb/app_crm_intelligent_search/logo.png",
  66. "https://apps-assets.fit2cloud.com/stable/maxkb/app_case_collection/logo.png",
  67. "https://apps-assets.fit2cloud.com/stable/maxkb/app_knowledge_self_assessment/logo.png",
  68. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_minerU_util/logo.png",
  69. "https://apps-assets.fit2cloud.com/stable/maxkb/app_invoice_recognition/logo.png",
  70. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_fragment/logo.png",
  71. "https://apps-assets.fit2cloud.com/stable/maxkb/app_contract_review/logo.png",
  72. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_echart_to_svg/logo.png",
  73. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_extract/logo.png",
  74. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_big_order/logo.png",
  75. "https://apps-assets.fit2cloud.com/stable/maxkb/app_crm_intelligent_recording/logo.png",
  76. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_dingrobot/logo.png",
  77. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_timestamp/logo.png",
  78. "https://apps-assets.fit2cloud.com/stable/maxkb/kbwf_knowledge_workflow/logo.png",
  79. "https://apps-assets.fit2cloud.com/stable/maxkb/app_household_registration_policy_qa_assistant/logo.png",
  80. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_httputils/logo.png",
  81. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_html_compression/logo.png",
  82. "https://apps-assets.fit2cloud.com/stable/maxkb/app_crm_customer_entry_ai_agent/logo.png",
  83. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_anspire/logo.png",
  84. "https://apps-assets.fit2cloud.com/stable/maxkb/app_application_template/logo.png",
  85. "https://apps-assets.fit2cloud.com/stable/maxkb/tool_baidu-translate/logo.png",
  86. "https://apps-assets.fit2cloud.com/stable/maxkb/app_website_translation/logo.png",
  87. ]
  88. def _replace_tool_icons(apps, schema_editor):
  89. if len(old) != len(new):
  90. raise ValueError("`old` 与 `new` 长度不一致,无法一一替换")
  91. Tool = apps.get_model("tools", "Tool")
  92. mapping = dict(zip(old, new))
  93. # 逐个 update,避免依赖数据库对 CASE/WHEN 的兼容差异
  94. for old_icon, new_icon in mapping.items():
  95. Tool.objects.filter(icon=old_icon).update(icon=new_icon)
  96. class Migration(migrations.Migration):
  97. dependencies = [
  98. ('tools', '0004_alter_tool_tool_type'),
  99. ]
  100. operations = [
  101. migrations.CreateModel(
  102. name='ToolRecord',
  103. fields=[
  104. ('create_time', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='创建时间')),
  105. ('update_time', models.DateTimeField(auto_now=True, db_index=True, verbose_name='修改时间')),
  106. ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
  107. ('source_type', models.CharField(choices=[('APPLICATION', 'Application'), ('KNOWLEDGE', 'Knowledge'), ('TRIGGER', 'Trigger')], default='APPLICATION', max_length=256, verbose_name='触发器任务类型')),
  108. ('source_id', models.UUIDField(verbose_name='资源id')),
  109. ('meta', models.JSONField(default=dict, encoder=common.encoder.encoder.SystemEncoder)),
  110. ('state', models.CharField(choices=[('PENDING', 'Pending'), ('STARTED', 'Started'), ('SUCCESS', 'Success'), ('FAILURE', 'Failure'), ('REVOKE', 'Revoke'), ('REVOKED', 'Revoked')], default='STARTED', max_length=20, verbose_name='状态')),
  111. ('run_time', models.FloatField(default=0, verbose_name='运行时长')),
  112. ('tool', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='tools.tool')),
  113. ('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')),
  114. ],
  115. options={
  116. 'db_table': 'tool_record',
  117. },
  118. ),
  119. migrations.RunPython(_replace_tool_icons, reverse_code=migrations.RunPython.noop),
  120. ]