修改工序排列方式

This commit is contained in:
caoqianming 2021-09-06 08:53:26 +08:00
parent b580f858eb
commit 6805669f47
6 changed files with 53 additions and 14 deletions

View File

@ -18,7 +18,7 @@ class MaterialDetailSerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
def get_processes_(self, obj): def get_processes_(self, obj):
objs = Process.objects.filter(id__in=obj.processes) objs = Process.objects.filter(id__in=obj.processes).order_by('number')
return ProcessSimpleSerializer(instance=objs, many=True).data return ProcessSimpleSerializer(instance=objs, many=True).data

View File

@ -157,6 +157,15 @@ class RecordFormViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet
return RecordFormUpdateSerializer return RecordFormUpdateSerializer
return RecordFormSerializer return RecordFormSerializer
@action(methods=['get'], detail=True, perms_map={'get':'*'}, pagination_class=None, serializer_class=RecordFormFieldSerializer)
def fields(self, request, pk=None):
"""
表格下的字段
"""
instance = self.get_object()
serializer = self.serializer_class(instance=RecordFormField.objects.filter(form=instance, is_deleted=False), many=True)
return Response(serializer.data)
class RecordFormFieldViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet): class RecordFormFieldViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet):
""" """

View File

@ -79,6 +79,9 @@ class Transition(CommonAModel):
""" """
工作流流转定时器条件(允许跳过) 条件流转与定时器不可同时存在 工作流流转定时器条件(允许跳过) 条件流转与定时器不可同时存在
""" """
TRANSITION_ATTRIBUTE_TYPE_ACCEPT = 1 # 同意
TRANSITION_ATTRIBUTE_TYPE_REFUSE = 2 # 拒绝
TRANSITION_ATTRIBUTE_TYPE_OTHER = 3 # 其他
attribute_type_choices = ( attribute_type_choices = (
(1, '同意'), (1, '同意'),
(2, '拒绝'), (2, '拒绝'),

View File

@ -1,7 +1,8 @@
from apps.system.serializers import UserSimpleSerializer
import rest_framework import rest_framework
from rest_framework import serializers from rest_framework import serializers
from .models import State, Ticket, Workflow, Transition, CustomField from .models import State, Ticket, TicketFlow, Workflow, Transition, CustomField
class WorkflowSerializer(serializers.ModelSerializer): class WorkflowSerializer(serializers.ModelSerializer):
@ -42,6 +43,10 @@ class CustomFieldSerializer(serializers.ModelSerializer):
model = CustomField model = CustomField
fields = '__all__' fields = '__all__'
class TicketSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Ticket
fields = '__all__'
class TicketCreateSerializer(serializers.ModelSerializer): class TicketCreateSerializer(serializers.ModelSerializer):
transition = serializers.IntegerField(label='流转ID') transition = serializers.IntegerField(label='流转ID')
@ -65,3 +70,12 @@ class TicketSerializer(serializers.ModelSerializer):
def setup_eager_loading(queryset): def setup_eager_loading(queryset):
queryset = queryset.select_related('workflow','state') queryset = queryset.select_related('workflow','state')
return queryset return queryset
class TicketFlowSerializer(serializers.ModelSerializer):
participant_ = UserSimpleSerializer(source='participant', read_only=True)
state_ = StateSimpleSerializer(source='state', read_only=True)
class Meta:
model = TicketFlow
fields = '__all__'

View File

@ -1,3 +1,4 @@
from apps.wf.serializers import TicketSerializer, TicketSimpleSerializer
from typing import Tuple from typing import Tuple
from apps.system.models import User from apps.system.models import User
from apps.wf.models import CustomField, State, Ticket, Transition, Workflow from apps.wf.models import CustomField, State, Ticket, Transition, Workflow
@ -198,7 +199,7 @@ class WfService(object):
:return: :return:
""" """
# 获取工单基础表中的字段中的字段信息 # 获取工单基础表中的字段中的字段信息
field_info_dict = ticket.get_dict() field_info_dict = TicketSimpleSerializer(instance=ticket).data
# 获取自定义字段的值 # 获取自定义字段的值
custom_fields_queryset = cls.get_workflow_custom_fields(ticket.workflow) custom_fields_queryset = cls.get_workflow_custom_fields(ticket.workflow)
for i in custom_fields_queryset: for i in custom_fields_queryset:

View File

@ -2,7 +2,7 @@ from django.core.exceptions import AppRegistryNotReady
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import serializers from rest_framework import serializers
from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin
from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCreateSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer from apps.wf.serializers import CustomFieldSerializer, StateSerializer, TicketCreateSerializer, TicketFlowSerializer, TicketSerializer, TransitionSerializer, WorkflowSerializer
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from rest_framework.viewsets import GenericViewSet, ModelViewSet from rest_framework.viewsets import GenericViewSet, ModelViewSet
from rest_framework.decorators import action, api_view from rest_framework.decorators import action, api_view
@ -116,7 +116,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
if value == State.STATE_FIELD_REQUIRED: if value == State.STATE_FIELD_REQUIRED:
if key not in ticket_data or not ticket_data[key]: if key not in ticket_data or not ticket_data[key]:
raise APIException('字段{}必填'.format(key)) raise APIException('字段{}必填'.format(key))
ticket = serializer.save(state=start_state) # 先创建出来 ticket = serializer.save(state=start_state, create_by=request.user) # 先创建出来
next_state = WfService.get_next_state_by_transition_and_ticket_info(ticket=ticket, transition=transition) next_state = WfService.get_next_state_by_transition_and_ticket_info(ticket=ticket, transition=transition)
participant_info = WfService.get_ticket_state_participant_info(state=next_state, ticket=ticket, ticket_data=ticket.ticket_data) participant_info = WfService.get_ticket_state_participant_info(state=next_state, ticket=ticket, ticket_data=ticket.ticket_data)
destination_participant_type = participant_info.get('destination_participant_type', 0) destination_participant_type = participant_info.get('destination_participant_type', 0)
@ -134,7 +134,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
if title_template: if title_template:
all_ticket_data = {**rdata, **rdata['ticket_data']} all_ticket_data = {**rdata, **rdata['ticket_data']}
title = title_template.format(**all_ticket_data) title = title_template.format(**all_ticket_data)
# 更新工单 # 更新一下信息
ticket.sn=sn ticket.sn=sn
ticket.title=title ticket.title=title
ticket.state=next_state ticket.state=next_state
@ -146,7 +146,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
# 新增流转记录 # 新增流转记录
TicketFlow.objects.create(ticket=ticket, state=start_state, ticket_data=WfService.get_ticket_all_field_value(ticket), TicketFlow.objects.create(ticket=ticket, state=start_state, ticket_data=WfService.get_ticket_all_field_value(ticket),
suggestion=rdata.get('suggestion',''), participant_type=State.PARTICIPANT_TYPE_PERSONAL, suggestion=rdata.get('suggestion',''), participant_type=State.PARTICIPANT_TYPE_PERSONAL,
participant=ticket.create_by, transition=transition, create_by=request.user) participant=ticket.create_by, transition=transition)
return Response(TicketSerializer(instance=ticket).data) return Response(TicketSerializer(instance=ticket).data)
@ -204,14 +204,14 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
ticket.participant = destination_participant ticket.participant = destination_participant
ticket.multi_all_person = multi_all_person ticket.multi_all_person = multi_all_person
if destination_state.type == State.STATE_TYPE_END: if destination_state.type == State.STATE_TYPE_END:
ticket.act_state = State.TICKET_ACT_STATE_FINISH ticket.act_state = Ticket.TICKET_ACT_STATE_FINISH
elif destination_state.type == State.STATE_TYPE_START: elif destination_state.type == State.STATE_TYPE_START:
ticket.act_state = State.TICKET_ACT_STATE_DRAFT ticket.act_state = Ticket.TICKET_ACT_STATE_DRAFT
else: else:
ticket.act_state = State.TICKET_ACT_STATE_ONGOING ticket.act_state = Ticket.TICKET_ACT_STATE_ONGOING
if transition.attribute_type == State.TRANSITION_ATTRIBUTE_TYPE_REFUSE: if transition.attribute_type == Transition.TRANSITION_ATTRIBUTE_TYPE_REFUSE:
transition.act_state = State.TICKET_ACT_STATE_BACK transition.act_state = Ticket.TICKET_ACT_STATE_BACK
# 只更新必填和可选的字段 # 只更新必填和可选的字段
for key, value in ticket.state.state_fields.items(): for key, value in ticket.state.state_fields.items():
@ -223,7 +223,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
# 更新工单流转记录 # 更新工单流转记录
TicketFlow.objects.create(ticket=ticket, state=source_state, ticket_data=WfService.get_ticket_all_field_value(ticket), TicketFlow.objects.create(ticket=ticket, state=source_state, ticket_data=WfService.get_ticket_all_field_value(ticket),
suggestion=data.get('suggestion',''), participant_type=State.PARTICIPANT_TYPE_PERSONAL, suggestion=data.get('suggestion',''), participant_type=State.PARTICIPANT_TYPE_PERSONAL,
participant=request.user, transition=transition, create_by=request.user) participant=request.user, transition=transition)
return Response(TicketSerializer(instance=ticket).data) return Response(TicketSerializer(instance=ticket).data)
@ -244,3 +244,15 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin
ticket = self.get_object() ticket = self.get_object()
transitions = WfService.get_ticket_transitions(ticket) transitions = WfService.get_ticket_transitions(ticket)
return Response(TransitionSerializer(instance=transitions, many=True).data) return Response(TransitionSerializer(instance=transitions, many=True).data)
class TicketFlowViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
"""
工单日志
"""
perms_map = {'*':'*'}
queryset = TicketFlow.objects.all()
serializer_class = TicketFlowSerializer
search_fields = ['suggestion']
filterset_fields = ['paticipant', 'state', 'ticket']
ordering = ['-create_time']