wf 增加filter dept

This commit is contained in:
曹前明 2022-07-18 13:45:03 +08:00
parent 57a3782a19
commit 0365b90b39
4 changed files with 59 additions and 23 deletions

View File

@ -3,7 +3,7 @@ from apps.opm.serializers import OplCloseSerializer
from apps.wf.models import Ticket, Transition from apps.wf.models import Ticket, Transition
def get_op_manager(state, ticket, new_ticket_data, handler): def get_op_charger(state, ticket, new_ticket_data, handler):
"""_summary_ """_summary_
Args: Args:
@ -32,7 +32,14 @@ def get_op_monitor(state, ticket, new_ticket_data, handler):
def bind_opl(ticket: Ticket, transition: Transition, new_ticket_data: dict): def bind_opl(ticket: Ticket, transition: Transition, new_ticket_data: dict):
opl = Opl.objects.get(id=new_ticket_data['opl']) opl = Opl.objects.get(id=new_ticket_data['opl'])
ticket_data = ticket.ticket_data ticket_data = ticket.ticket_data
ticket_data.update({'level': opl.level}) ticket_data.update({
'level': opl.level,
'monitor': opl.monitor.id,
'workers': list(OplWorker.objects.filter(opl=opl).values_list('worker__id', flat=True)),
'manager': opl.charger.id,
'dept_ter': opl.operation.dept_ter,
'dept_bus': opl.operation.dept_bus
})
ticket.ticket_data = ticket_data ticket.ticket_data = ticket_data
ticket.save() ticket.save()
opl.ticket = ticket opl.ticket = ticket

View File

@ -0,0 +1,22 @@
# Generated by Django 3.2.12 on 2022-07-18 05:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wf', '0003_ticket_belong_dept'),
]
operations = [
migrations.RemoveField(
model_name='state',
name='filter_policy',
),
migrations.AddField(
model_name='state',
name='filter_dept',
field=models.CharField(default=0, max_length=20, verbose_name='部门字段过滤'),
),
]

View File

@ -102,7 +102,8 @@ class State(CommonAModel):
'表单字段', blank=True, default=dict, help_text='json格式字典存储,包括读写属性1只读2必填3可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称)state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称') '表单字段', blank=True, default=dict, help_text='json格式字典存储,包括读写属性1只读2必填3可选, 4:隐藏 示例:{"create_time":1,"title":2, "sn":1}, 内置特殊字段participant_info.participant_name:当前处理人信息(部门名称、角色名称)state.state_name:当前状态的状态名,workflow.workflow_name:工作流名称')
distribute_type = models.IntegerField('分配方式', default=1, choices=state_distribute_choices, distribute_type = models.IntegerField('分配方式', default=1, choices=state_distribute_choices,
help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)') help_text='1.主动接单(如果当前处理人实际为多人的时候,需要先接单才能处理) 2.直接处理(即使当前处理人实际为多人,也可以直接处理) 3.随机分配(如果实际为多人,则系统会随机分配给其中一个人) 4.全部处理(要求所有参与人都要处理一遍,才能进入下一步)')
filter_policy = models.IntegerField('参与人过滤策略', default=0, choices=state_filter_choices) # filter_policy = models.IntegerField('参与人过滤策略', default=0, choices=state_filter_choices)
filter_dept = models.CharField('部门字段过滤', default=0, max_length=20)
participant_cc = models.JSONField('抄送给', default=list, blank=True, help_text='抄送给(userid列表)') participant_cc = models.JSONField('抄送给', default=list, blank=True, help_text='抄送给(userid列表)')
on_reach_func = models.CharField('到达时调用方法', max_length=100, null=True, blank=True) on_reach_func = models.CharField('到达时调用方法', max_length=100, null=True, blank=True)

View File

@ -1,6 +1,6 @@
import importlib import importlib
from apps.wf.serializers import TicketSimpleSerializer from apps.wf.serializers import TicketSimpleSerializer
from apps.system.models import User from apps.system.models import Dept, User
from apps.wf.models import CustomField, State, Ticket, TicketFlow, Transition, Workflow from apps.wf.models import CustomField, State, Ticket, TicketFlow, Transition, Workflow
from rest_framework.exceptions import APIException, PermissionDenied, ValidationError from rest_framework.exceptions import APIException, PermissionDenied, ValidationError
from django.utils import timezone from django.utils import timezone
@ -173,29 +173,35 @@ class WfService(object):
elif destination_participant_type == State.PARTICIPANT_TYPE_POST: # 岗位 elif destination_participant_type == State.PARTICIPANT_TYPE_POST: # 岗位
user_queryset = User.objects.filter(posts__in=destination_participant) user_queryset = User.objects.filter(posts__in=destination_participant)
# 如果选择了岗位, 需要走过滤策略 # 如果选择了岗位, 可能需要走过滤策略
if state.filter_policy == 1: if state.filter_dept:
depts = get_parent_queryset(ticket.belong_dept) dpts = Dept.objects.filter(id=new_ticket_data[state.filter_dept])
user_queryset = user_queryset.filter(depts__in=depts) user_queryset = user_queryset.filter(depts__in=dpts)
elif state.filter_policy == 2: # if state.filter_policy == 1:
depts = get_parent_queryset(ticket.create_by.belong_dept) # depts = get_parent_queryset(ticket.belong_dept)
user_queryset = user_queryset.filter(depts__in=depts) # user_queryset = user_queryset.filter(depts__in=depts)
elif state.filter_policy == 3: # elif state.filter_policy == 2:
depts = get_parent_queryset(handler.belong_dept) # depts = get_parent_queryset(ticket.create_by.belong_dept)
user_queryset = user_queryset.filter(depts__in=depts) # user_queryset = user_queryset.filter(depts__in=depts)
# elif state.filter_policy == 3:
# depts = get_parent_queryset(handler.belong_dept)
# user_queryset = user_queryset.filter(depts__in=depts)
destination_participant = list(user_queryset.values_list('id', flat=True)) destination_participant = list(user_queryset.values_list('id', flat=True))
elif destination_participant_type == State.PARTICIPANT_TYPE_ROLE: # 角色 elif destination_participant_type == State.PARTICIPANT_TYPE_ROLE: # 角色
user_queryset = User.objects.filter(roles__in=destination_participant) user_queryset = User.objects.filter(roles__in=destination_participant)
# 如果选择了角色, 需要走过滤策略 # 如果选择了角色, 需要走过滤策略
if state.filter_policy == 1: if state.filter_dept:
depts = get_parent_queryset(ticket.belong_dept) dpts = Dept.objects.filter(id=new_ticket_data.get(state.filter_dept, '0'))
user_queryset = user_queryset.filter(depts__in=depts) user_queryset = user_queryset.filter(depts__in=dpts)
elif state.filter_policy == 2: # if state.filter_policy == 1:
depts = get_parent_queryset(ticket.create_by.belong_dept) # depts = get_parent_queryset(ticket.belong_dept)
user_queryset = user_queryset.filter(depts__in=depts) # user_queryset = user_queryset.filter(depts__in=depts)
elif state.filter_policy == 3: # elif state.filter_policy == 2:
depts = get_parent_queryset(handler.belong_dept) # depts = get_parent_queryset(ticket.create_by.belong_dept)
user_queryset = user_queryset.filter(depts__in=depts) # user_queryset = user_queryset.filter(depts__in=depts)
# elif state.filter_policy == 3:
# depts = get_parent_queryset(handler.belong_dept)
# user_queryset = user_queryset.filter(depts__in=depts)
destination_participant = list(user_queryset.values_list('id', flat=True)) destination_participant = list(user_queryset.values_list('id', flat=True))
if destination_participant_type != 0 and (not destination_participant): if destination_participant_type != 0 and (not destination_participant):
raise ParseError('未找到处理人,工单无法继续') raise ParseError('未找到处理人,工单无法继续')