From 145bf1d6b7c27492f41eb7db8c51d52bc4ec4fe3 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 22 Oct 2021 14:36:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=8E=B7=E5=8F=96=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migrations/0025_outputmaterial_is_main.py | 18 ++++++++++++++++++ hb_server/apps/wf/models.py | 1 + hb_server/apps/wf/scripts.py | 15 +++++++++++++++ hb_server/apps/wf/services.py | 5 +++++ hb_server/apps/wf/urls.py | 3 ++- hb_server/apps/wf/views.py | 9 +++++++++ hb_server/apps/wpm/models.py | 18 +++++++++++++++--- hb_server/server/settings.py | 2 ++ 8 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 hb_server/apps/mtm/migrations/0025_outputmaterial_is_main.py create mode 100644 hb_server/apps/wf/scripts.py diff --git a/hb_server/apps/mtm/migrations/0025_outputmaterial_is_main.py b/hb_server/apps/mtm/migrations/0025_outputmaterial_is_main.py new file mode 100644 index 0000000..51f4988 --- /dev/null +++ b/hb_server/apps/mtm/migrations/0025_outputmaterial_is_main.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.6 on 2021-10-21 08:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mtm', '0024_alter_recordformfield_rule_expression'), + ] + + operations = [ + migrations.AddField( + model_name='outputmaterial', + name='is_main', + field=models.BooleanField(default=True, verbose_name='是否主产出'), + ), + ] diff --git a/hb_server/apps/wf/models.py b/hb_server/apps/wf/models.py index fff81ed..7415534 100644 --- a/hb_server/apps/wf/models.py +++ b/hb_server/apps/wf/models.py @@ -232,5 +232,6 @@ class WfScript(CommonAModel): wait = models.BooleanField('是否等待执行完成', default=True) name = models.CharField('脚本名称', max_length=100) workflow = models.ForeignKey(Workflow, verbose_name='关联工作流', null=True, blank=True, on_delete=models.SET_NULL) + func_str = models.CharField('函数名', max_length=50, null=True, blank=True) content = models.TextField('脚本内容') diff --git a/hb_server/apps/wf/scripts.py b/hb_server/apps/wf/scripts.py new file mode 100644 index 0000000..5c2ccb4 --- /dev/null +++ b/hb_server/apps/wf/scripts.py @@ -0,0 +1,15 @@ +from .models import State +class GetParticipants: + + all_funcs = [ + {'func':'get_create_by', 'name':'获取工单创建人'} + ] + + # def all_funcs(self): + # # return list(filter(lambda x: x.startswith('get_') and callable(getattr(self, x)), dir(self))) + # return [(func, getattr(self, func).__doc__) for func in dir(self) if callable(getattr(self, func)) and func.startswith('get_')] + + def get_create_by(self, state:dict={}, ticket:dict={}, ticket_data:dict={}, request={}): + """工单创建人""" + participant = ticket.create_by.id + return participant \ No newline at end of file diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index ad45929..d370bdf 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -7,6 +7,7 @@ from rest_framework.exceptions import APIException from django.utils import timezone from datetime import timedelta import random +from .scripts import GetParticipants class WfService(object): @staticmethod @@ -147,6 +148,10 @@ class WfService(object): if destination_participant_type == State.PARTICIPANT_TYPE_FIELD: destination_participant = ticket_data.get(destination_participant, 0) if destination_participant in ticket_data \ else Ticket.ticket_data.get(destination_participant, 0) + + elif destination_participant_type == State.PARTICIPANT_TYPE_FORMCODE:#代码获取 + destination_participant = getattr(GetParticipants, destination_participant)(state=state, ticket=ticket, ticket_data=ticket_data, request=request) + elif destination_participant_type == State.PARTICIPANT_TYPE_DEPT:#部门 destination_participant = list(User.objects.filter(dept__in=destination_participant).values_list('id', flat=True)) diff --git a/hb_server/apps/wf/urls.py b/hb_server/apps/wf/urls.py index b03a965..5c9ae0d 100644 --- a/hb_server/apps/wf/urls.py +++ b/hb_server/apps/wf/urls.py @@ -1,6 +1,6 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.wf.views import CustomFieldViewSet, StateViewSet, TicketFlowViewSet, TicketViewSet, TransitionViewSet, WorkflowViewSet +from apps.wf.views import CustomFieldViewSet, FromCodeListView, StateViewSet, TicketFlowViewSet, TicketViewSet, TransitionViewSet, WorkflowViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter @@ -12,6 +12,7 @@ router.register('customfield', CustomFieldViewSet, basename='wf_customfield') router.register('ticket', TicketViewSet, basename='wf_ticket') router.register('ticketflow', TicketFlowViewSet, basename='wf_ticketflow') urlpatterns = [ + path('participant_from_code', FromCodeListView.as_view()), path('', include(router.urls)), ] diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index 1025505..b3158cc 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -1,4 +1,5 @@ from django.db.models import query +from rest_framework.views import APIView from apps.system.models import User from apps.wf.filters import TicketFilterSet from django.core.exceptions import AppRegistryNotReady @@ -15,8 +16,16 @@ from apps.wf.services import WfService from rest_framework.exceptions import APIException, PermissionDenied from rest_framework import status from django.db.models import Count +from .scripts import GetParticipants # Create your views here. +class FromCodeListView(APIView): + def get(self, request, format=None): + """ + 获取处理人代码列表 + """ + return Response(GetParticipants.all_funcs) + class WorkflowViewSet(CreateUpdateModelAMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'workflow_create', 'put': 'workflow_update', 'delete': 'workflow_delete'} diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 767b0fd..6d03ea9 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -5,17 +5,29 @@ from django.db.models.query import QuerySet from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File from utils.model import SoftModel, BaseModel from simple_history.models import HistoricalRecords - +from apps.mtm.models import Material, Step class Good(CommonAModel): """ 物品 """ + act_state_choices=( + (0, '待执行'), + (1, '进行中'), + (2, '已完成') + ) number = models.CharField('物品编号', primary_key=True, null=True, blank=True, max_length=50) - m_state = models.ForeignKey('所属物料状态', on_delete=models.CASCADE) - p_state = models.ForeignKey('所在步骤', ) + m_state = models.ForeignKey(Material, verbose_name='所属物料状态', on_delete=models.CASCADE) + p_state = models.ForeignKey(Step, verbose_name='所在步骤', on_delete=models.CASCADE, null=True, blank=True) + act_state = models.IntegerField('进行状态', default=0) +class GoodFlow(BaseModel): + """ + 物品流转日志 + """ + pass + class Vendor(CommonAModel): """ diff --git a/hb_server/server/settings.py b/hb_server/server/settings.py index 6fb07a7..7d1174e 100644 --- a/hb_server/server/settings.py +++ b/hb_server/server/settings.py @@ -41,6 +41,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'corsheaders', 'django_celery_beat', + 'django_celery_results', 'drf_yasg', 'rest_framework', "django_filters", @@ -203,6 +204,7 @@ CELERY_BROKER_URL = "redis://redis:6379/0" # 任务存储 CELERYD_MAX_TASKS_PER_CHILD = 100 # 每个worker最多执行300个任务就会被销毁,可防止内存泄露 CELERY_TIMEZONE = 'Asia/Shanghai' # 设置时区 CELERY_ENABLE_UTC = True # 启动时区设置 +CELERY_RESULT_BACKEND = 'django-db' # swagger配置 SWAGGER_SETTINGS = {