From 677bf4853b612008ab0716fd1f98f7bee6f57706 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 25 Oct 2021 13:08:21 +0800 Subject: [PATCH 01/22] =?UTF-8?q?=E8=A7=92=E8=89=B2=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E7=AD=96=E7=95=A5bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/inm/models.py | 12 ++++++++++++ hb_server/apps/pm/models.py | 2 ++ hb_server/apps/pm/views.py | 14 ++++++++++++++ hb_server/apps/wf/services.py | 6 +++--- hb_server/apps/wpm/models.py | 1 + hb_server/apps/wpm/serializers.py | 7 ------- hb_server/apps/wpm/urls.py | 3 +-- hb_server/apps/wpm/views.py | 16 +--------------- 8 files changed, 34 insertions(+), 27 deletions(-) diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index 20decf8..8c8c1ec 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -47,6 +47,8 @@ class MaterialBatch(BaseModel): verbose_name = '库存表' verbose_name_plural = verbose_name + + class FIFO(CommonAModel): """ 出入库记录 @@ -66,4 +68,14 @@ class FIFO(CommonAModel): # 领料详细记录 # """ +class Product(CommonAModel): + """ + 具体产品 + """ + number = models.CharField('物品编号', primary_key=True, null=True, blank=True, max_length=50) + material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE) + warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='所在仓库') + batch = models.CharField('所属批次号', max_length=100, null=True, blank=True) + fifos = models.JSONField('关联出入库记录', default=list, blank=True) + diff --git a/hb_server/apps/pm/models.py b/hb_server/apps/pm/models.py index 8e9299d..cdfb9bc 100644 --- a/hb_server/apps/pm/models.py +++ b/hb_server/apps/pm/models.py @@ -46,6 +46,8 @@ class SubProductionPlan(CommonAModel): process = models.ForeignKey(Process, verbose_name='关联大工序', on_delete=models.CASCADE) steps = models.JSONField('工艺步骤', default=list) state = models.IntegerField('状态', default=0) + start_date_real = models.DateField('实际开工日期', null=True, blank=True) + end_date_real = models.DateField('实际完工日期', null=True, blank=True) class Meta: verbose_name = '子生产计划' verbose_name_plural = verbose_name diff --git a/hb_server/apps/pm/views.py b/hb_server/apps/pm/views.py index 62c2473..a7a21f0 100644 --- a/hb_server/apps/pm/views.py +++ b/hb_server/apps/pm/views.py @@ -1,3 +1,4 @@ +from datetime import timezone from rest_framework import serializers from rest_framework.views import APIView from apps.em.models import Equipment @@ -122,6 +123,19 @@ class SubProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, UpdateMo obj.save() return Response() raise APIException('计划状态有误') + + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=serializers.Serializer) + def start(self, request, pk=None): + """ + 开始生产 + """ + obj = self.get_object() + if obj.state in [1,2]: + obj.state = 3 + obj.start_date_real = timezone.now() + obj.save() + return Response() + raise APIException('计划状态有误') class ResourceViewSet(GenericViewSet): diff --git a/hb_server/apps/wf/services.py b/hb_server/apps/wf/services.py index f45c1b5..bc39a3e 100644 --- a/hb_server/apps/wf/services.py +++ b/hb_server/apps/wf/services.py @@ -159,13 +159,13 @@ class WfService(object): elif destination_participant_type == State.PARTICIPANT_TYPE_ROLE:#角色 user_queryset = User.objects.filter(roles__in=destination_participant) # 如果选择了角色, 需要走过滤策略 - if ticket.filter_policy == 1: + if state.filter_policy == 1: depts = get_parent_queryset(ticket.belong_dept) user_queryset = user_queryset.filter(dept__in=depts) - elif ticket.filter_policy == 2: + elif state.filter_policy == 2: depts = get_parent_queryset(ticket.create_by.dept) user_queryset = user_queryset.filter(dept__in=depts) - elif ticket.filter_policy == 3: + elif state.filter_policy == 3: depts = get_parent_queryset(request.user.dept) user_queryset = user_queryset.filter(dept__in=depts) destination_participant = list(user_queryset.values_list('id', flat=True)) diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 50be3f7..e53745e 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -20,6 +20,7 @@ class Product(CommonAModel): 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) + parent = models.ForeignKey('self', verbose_name='上一级', on_delete=models.CASCADE, db_constraint=False) remark = models.CharField('备注', max_length=200, null=True, blank=True) class ProductForm(CommonAModel): diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 037f7ef..697569a 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -1,9 +1,2 @@ from rest_framework.serializers import ModelSerializer -from .models import Vendor - - -class VendorSerializer(ModelSerializer): - class Meta: - model = Vendor - fields = '__all__' diff --git a/hb_server/apps/wpm/urls.py b/hb_server/apps/wpm/urls.py index a81ad24..a0e8919 100644 --- a/hb_server/apps/wpm/urls.py +++ b/hb_server/apps/wpm/urls.py @@ -1,11 +1,10 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.pum.views import VendorViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter router = DefaultRouter() -router.register('vendor', VendorViewSet, basename='vendor') + urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index ad479b5..bb114b1 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -1,20 +1,6 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet -from apps.pum.models import Vendor -from apps.pum.serializers import VendorSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin -# Create your views here. -class VendorViewSet(CreateUpdateModelAMixin, ModelViewSet): - """ - 供应商-增删改查 - """ - perms_map = {'get': '*', 'post': 'vendor_create', - 'put': 'vendor_update', 'delete': 'vendor_delete'} - queryset = Vendor.objects.all() - serializer_class = VendorSerializer - search_fields = ['name', 'contact'] - filterset_fields = [] - ordering_fields = ['create_time'] - ordering = ['-create_time'] +# Create your views here. \ No newline at end of file From 2931b1322ee208a67d980f8b68870568148624bf Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 25 Oct 2021 13:11:44 +0800 Subject: [PATCH 02/22] =?UTF-8?q?inm=20product=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/inm/models.py | 2 +- hb_server/apps/wpm/models.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index 8c8c1ec..767745b 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -72,7 +72,7 @@ class Product(CommonAModel): """ 具体产品 """ - number = models.CharField('物品编号', primary_key=True, null=True, blank=True, max_length=50) + number = models.CharField('物品编号', unique=True, null=True, blank=True, max_length=50) material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE) warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='所在仓库') batch = models.CharField('所属批次号', max_length=100, null=True, blank=True) diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index e53745e..18a95f5 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -16,7 +16,7 @@ class Product(CommonAModel): (1, '进行中'), (2, '已完成') ) - number = models.CharField('物品编号', primary_key=True, null=True, blank=True, max_length=50) + number = models.CharField('物品编号', unique=True, null=True, blank=True, max_length=50) 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) From ac879dd74e091cb025d0377df00ca323eab72c4c Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 25 Oct 2021 13:17:40 +0800 Subject: [PATCH 03/22] =?UTF-8?q?=E6=8A=84=E9=80=81bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hb_server/apps/wf/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hb_server/apps/wf/views.py b/hb_server/apps/wf/views.py index e97cbb4..ab0c5de 100644 --- a/hb_server/apps/wf/views.py +++ b/hb_server/apps/wf/views.py @@ -183,7 +183,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin participant=None, participant_cc=start_state.participant_cc) # 目标状态需要抄送 if next_state.participant_cc: - TicketFlow.objects.create(ticket=ticket, state=ticket.next_state, + TicketFlow.objects.create(ticket=ticket, state=next_state, participant_type=0, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CC, participant=None, participant_cc=next_state.participant_cc) return Response(TicketSerializer(instance=ticket).data) @@ -276,7 +276,7 @@ class TicketViewSet(OptimizationMixin, CreateUpdateCustomMixin, CreateModelMixin participant=request.user, transition=transition) # 目标状态需要抄送 if destination_state.participant_cc: - TicketFlow.objects.create(ticket=ticket, state=ticket.destination_state, + TicketFlow.objects.create(ticket=ticket, state=destination_state, participant_type=0, intervene_type=Transition.TRANSITION_INTERVENE_TYPE_CC, participant=None, participant_cc=destination_state.participant_cc) return Response(TicketSerializer(instance=ticket).data) From ee095432272a858960fbdb4d24f5a5cbc71f4a20 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Mon, 25 Oct 2021 13:21:26 +0800 Subject: [PATCH 04/22] getParticipant bug --- hb_server/apps/wf/scripts.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hb_server/apps/wf/scripts.py b/hb_server/apps/wf/scripts.py index 5e818f7..3bdb206 100644 --- a/hb_server/apps/wf/scripts.py +++ b/hb_server/apps/wf/scripts.py @@ -8,7 +8,8 @@ class GetParticipants: # # 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={}): + @classmethod + def get_create_by(cls, state:dict={}, ticket:dict={}, ticket_data:dict={}, request={}): """工单创建人""" participant = ticket.create_by.id return participant \ No newline at end of file From a1daf44643cc0708dfd0256e60a48cf875f4471d Mon Sep 17 00:00:00 2001 From: shijing Date: Mon, 25 Oct 2021 15:17:41 +0800 Subject: [PATCH 05/22] refresh --- hb_client/src/App.vue | 2 +- hb_client/src/layout/components/Navbar.vue | 2 +- .../src/layout/components/TagsView/index.vue | 31 +++++++++---------- hb_client/src/router/index.js | 12 ++++++- hb_client/src/views/dashboard/index.vue | 2 +- hb_client/src/views/redirect/index.vue | 12 +++++++ hb_client/src/views/testModel/faceLogin.vue | 18 ++++------- hb_client/src/views/testModel/markImage.vue | 20 +++++++++--- hb_client/src/views/workflow/state.vue | 10 ++++-- hb_client/src/views/workflow/ticket.vue | 2 +- 10 files changed, 72 insertions(+), 39 deletions(-) create mode 100644 hb_client/src/views/redirect/index.vue diff --git a/hb_client/src/App.vue b/hb_client/src/App.vue index e50cc4e..180a9bb 100644 --- a/hb_client/src/App.vue +++ b/hb_client/src/App.vue @@ -19,7 +19,7 @@ export default { } }, mounted(){ - // this.$store.dispatch("user/getCount", {}) + this.$store.dispatch("user/getCount", {}); this.timer = window.setInterval(() => { setTimeout(() => { this.$store.dispatch("user/getCount", {}) diff --git a/hb_client/src/layout/components/Navbar.vue b/hb_client/src/layout/components/Navbar.vue index 1ba9bc9..466f5b3 100644 --- a/hb_client/src/layout/components/Navbar.vue +++ b/hb_client/src/layout/components/Navbar.vue @@ -6,7 +6,7 @@
- diff --git a/hb_client/src/views/testModel/faceLogin.vue b/hb_client/src/views/testModel/faceLogin.vue index 360a18d..c88941e 100644 --- a/hb_client/src/views/testModel/faceLogin.vue +++ b/hb_client/src/views/testModel/faceLogin.vue @@ -12,9 +12,8 @@