Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

minor: ticket_taskfield添加索引 #1467

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
281 changes: 281 additions & 0 deletions itsm/ticket/migrations/0073_auto_20250110_1108.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,281 @@
# Generated by Django 3.2.25 on 2025-01-10 11:08

from django.db import migrations, models
import django.db.models.manager


class Migration(migrations.Migration):

dependencies = [
("ticket", "0072_auto_20240513_1608"),
]

operations = [
migrations.AlterModelManagers(
name="ticketfollowernotifylog",
managers=[
("_objects", django.db.models.manager.Manager()),
],
),
migrations.AlterField(
model_name="status",
name="assignors_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="派单人类型",
),
),
migrations.AlterField(
model_name="status",
name="delivers_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="转单人类型",
),
),
migrations.AlterField(
model_name="status",
name="processors_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="处理人类型",
),
),
migrations.AlterField(
model_name="taskfield",
name="task_id",
field=models.IntegerField(db_index=True, default=-1, verbose_name="任务ID"),
),
migrations.AlterField(
model_name="taskfield",
name="type",
field=models.CharField(
choices=[
("STRING", "单行文本"),
("TEXT", "多行文本"),
("INT", "数字"),
("DATE", "日期"),
("DATETIME", "日期时间"),
("DATETIMERANGE", "时间间隔"),
("TABLE", "表格"),
("SELECT", "单选下拉框"),
("INPUTSELECT", "可输入单选下拉框"),
("MULTISELECT", "多选下拉框"),
("CHECKBOX", "复选框"),
("RADIO", "单选框"),
("MEMBER", "单个人员选择"),
("MEMBERS", "多个人员选择"),
("RICHTEXT", "富文本"),
("FILE", "附件上传"),
("CUSTOMTABLE", "自定义表格"),
("TREESELECT", "树形选择"),
("LINK", "链接"),
("CUSTOM-FORM", "自定义表单"),
("CASCADE", "级联"),
],
default="STRING",
max_length=32,
verbose_name="字段类型",
),
),
migrations.AlterField(
model_name="ticket",
name="current_assignor_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="分派人类型",
),
),
migrations.AlterField(
model_name="ticket",
name="current_processors_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="处理者类型",
),
),
migrations.AlterField(
model_name="ticket",
name="supervise_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="督办人类型",
),
),
migrations.AlterField(
model_name="ticketeventlog",
name="processors_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="OPEN",
max_length=32,
verbose_name="处理人类型",
),
),
migrations.AlterField(
model_name="ticketfield",
name="type",
field=models.CharField(
choices=[
("STRING", "单行文本"),
("TEXT", "多行文本"),
("INT", "数字"),
("DATE", "日期"),
("DATETIME", "日期时间"),
("DATETIMERANGE", "时间间隔"),
("TABLE", "表格"),
("SELECT", "单选下拉框"),
("INPUTSELECT", "可输入单选下拉框"),
("MULTISELECT", "多选下拉框"),
("CHECKBOX", "复选框"),
("RADIO", "单选框"),
("MEMBER", "单个人员选择"),
("MEMBERS", "多个人员选择"),
("RICHTEXT", "富文本"),
("FILE", "附件上传"),
("CUSTOMTABLE", "自定义表格"),
("TREESELECT", "树形选择"),
("LINK", "链接"),
("CUSTOM-FORM", "自定义表单"),
("CASCADE", "级联"),
],
default="STRING",
max_length=32,
verbose_name="字段类型",
),
),
migrations.AlterField(
model_name="ticketfollowernotifylog",
name="followers_type",
field=models.CharField(
choices=[
("CMDB", "CMDB业务公用角色"),
("GENERAL", "通用角色表"),
("OPEN", "不限"),
("PERSON", "个人"),
("STARTER", "提单人"),
("STARTER_LEADER", "提单人上级"),
("ASSIGN_LEADER", "指定节点处理人上级"),
("BY_ASSIGNOR", "派单人指定"),
("EMPTY", "无"),
("ORGANIZATION", "组织架构"),
("VARIABLE", "引用变量"),
("VARIABLE_LEADER", "指定变量上级"),
("IAM", "权限中心角色"),
],
default="EMPTY",
max_length=32,
verbose_name="处理者类型/角色类型",
),
),
]
75 changes: 51 additions & 24 deletions itsm/ticket/models/field.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,12 @@

from itsm.component.constants import EMPTY_STRING, LEN_SHORT, SHOW_BY_CONDITION
from itsm.component.utils.conversion import format_exp_value, show_conditions_validate
from itsm.component.utils.misc import get_choice_route, get_field_display_value, get_field_value, set_field_value
from itsm.component.utils.misc import (
get_choice_route,
get_field_display_value,
get_field_value,
set_field_value,
)
from itsm.workflow.models import BaseField

from . import managers
Expand All @@ -37,13 +42,25 @@
class TicketField(BaseField):
"""表单字段值表"""

SOURCE = [('CUSTOM', '自定义添加'), ('TABLE', '基础模型添加')]
SOURCE = [("CUSTOM", "自定义添加"), ("TABLE", "基础模型添加")]

ticket = models.ForeignKey('ticket.Ticket', help_text=_("关联工单"), related_name="fields", on_delete=models.CASCADE)
state_id = models.CharField("对应的状态id", max_length=LEN_SHORT, default=EMPTY_STRING, null=True, blank=True)
ticket = models.ForeignKey(
"ticket.Ticket",
help_text=_("关联工单"),
related_name="fields",
on_delete=models.CASCADE,
)
state_id = models.CharField(
"对应的状态id", max_length=LEN_SHORT, default=EMPTY_STRING, null=True, blank=True
)
_value = models.TextField(_("表单值"), null=True, blank=True)
source = models.CharField(_('添加方式'), max_length=LEN_SHORT, choices=SOURCE, default='CUSTOM')
workflow_field_id = models.IntegerField(_('流程版本字段ID'), default=-1,)
source = models.CharField(
_("添加方式"), max_length=LEN_SHORT, choices=SOURCE, default="CUSTOM"
)
workflow_field_id = models.IntegerField(
_("流程版本字段ID"),
default=-1,
)

objects = managers.TicketFieldManager()

Expand Down Expand Up @@ -79,23 +96,25 @@ def value(self, v):
def _display_value(self):
"""用于获取日志接口的数据展示"""
if not self._value:
return ''
return ""

if self.type in ['SELECT', 'RADIO']:
return {str(choice['key']): choice['name'] for choice in self.choice}.get(self._value, self._value)
if self.type in ["SELECT", "RADIO"]:
return {str(choice["key"]): choice["name"] for choice in self.choice}.get(
self._value, self._value
)

if self.type in ['MULTISELECT', 'CHECKBOX', 'MEMBERS']:
choice = {str(choice['key']): choice['name'] for choice in self.choice}
return ','.join([choice.get(key, key) for key in self._value.split(',')])
if self.type in ["MULTISELECT", "CHECKBOX", "MEMBERS"]:
choice = {str(choice["key"]): choice["name"] for choice in self.choice}
return ",".join([choice.get(key, key) for key in self._value.split(",")])

if self.type == 'TREESELECT':
if self.type == "TREESELECT":
route = get_choice_route(self.choice, self._value)
return '->'.join([item['name'] for item in route]) or self._value
return "->".join([item["name"] for item in route]) or self._value

if self.type == 'TABLE':
return {'header': self.choice, 'value': self.value}
if self.type == 'CUSTOMTABLE':
return {'header': self.meta, 'value': self.value}
if self.type == "TABLE":
return {"header": self.choice, "value": self.value}
if self.type == "CUSTOMTABLE":
return {"header": self.meta, "value": self.value}

return self._value

Expand All @@ -112,8 +131,9 @@ def show_result(self, show_all_fields):

if self.show_type == SHOW_BY_CONDITION:
key_value = {
'params_%s' % item['key']: format_exp_value(item['type'], item['_value'])
for item in self.ticket.fields.values('key', '_value', 'type')
"params_%s"
% item["key"]: format_exp_value(item["type"], item["_value"])
for item in self.ticket.fields.values("key", "_value", "type")
}
if show_conditions_validate(self.show_conditions, key_value):
return False
Expand All @@ -126,11 +146,18 @@ class TaskField(BaseField):

SOURCE = [("CUSTOM", "自定义添加"), ("TABLE", "基础模型添加")]

state_id = models.CharField("对应的状态id", max_length=LEN_SHORT, default=EMPTY_STRING, null=True, blank=True)
state_id = models.CharField(
"对应的状态id", max_length=LEN_SHORT, default=EMPTY_STRING, null=True, blank=True
)
_value = models.TextField(_("表单值"), null=True, blank=True)
source = models.CharField(_("添加方式"), max_length=LEN_SHORT, choices=SOURCE, default="CUSTOM")
workflow_field_id = models.IntegerField(_("流程版本字段ID"), default=-1,)
task_id = models.IntegerField(_("任务ID"), default=-1)
source = models.CharField(
_("添加方式"), max_length=LEN_SHORT, choices=SOURCE, default="CUSTOM"
)
workflow_field_id = models.IntegerField(
_("流程版本字段ID"),
default=-1,
)
task_id = models.IntegerField(_("任务ID"), default=-1, db_index=True)

class Meta:
app_label = "ticket"
Expand Down