diff --git a/hb_server/apps/auth1/__init__.py b/hb_server/apps/auth1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hb_server/apps/auth1/admin.py b/hb_server/apps/auth1/admin.py new file mode 100644 index 0000000..a8f9299 --- /dev/null +++ b/hb_server/apps/auth1/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from rest_framework_simplejwt.views import (TokenObtainPairView, + TokenRefreshView) +# Register your models here. diff --git a/hb_server/apps/auth1/apps.py b/hb_server/apps/auth1/apps.py new file mode 100644 index 0000000..74a0184 --- /dev/null +++ b/hb_server/apps/auth1/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class AuthConfig(AppConfig): + name = 'apps.auth1' + verbose_name = "认证" + diff --git a/hb_server/apps/auth1/migrations/__init__.py b/hb_server/apps/auth1/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hb_server/apps/auth1/models.py b/hb_server/apps/auth1/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/hb_server/apps/auth1/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/hb_server/apps/auth1/serializers.py b/hb_server/apps/auth1/serializers.py new file mode 100644 index 0000000..f318bee --- /dev/null +++ b/hb_server/apps/auth1/serializers.py @@ -0,0 +1,5 @@ +from rest_framework import serializers + +class LoginSerializer(serializers.Serializer): + username = serializers.CharField(label="用户名") + password = serializers.CharField(label="密码") \ No newline at end of file diff --git a/hb_server/apps/auth1/tests.py b/hb_server/apps/auth1/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/hb_server/apps/auth1/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/hb_server/apps/auth1/urls.py b/hb_server/apps/auth1/urls.py new file mode 100644 index 0000000..1f3cfac --- /dev/null +++ b/hb_server/apps/auth1/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from rest_framework_simplejwt.views import (TokenObtainPairView, + TokenRefreshView) + +from apps.auth1.views import LoginView, LogoutView, TokenBlackView +urlpatterns = [ + path('token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), + path('token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), + path('token/black/', TokenBlackView.as_view(), name='token_black'), + path('login/', LoginView.as_view(), name='api_login'), + path('logout/', LogoutView.as_view(), name='api_logout') +] \ No newline at end of file diff --git a/hb_server/apps/auth1/views.py b/hb_server/apps/auth1/views.py new file mode 100644 index 0000000..82ab681 --- /dev/null +++ b/hb_server/apps/auth1/views.py @@ -0,0 +1,47 @@ + +from django.shortcuts import render +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework import status +from django.contrib.auth import authenticate, login, logout +from rest_framework.generics import CreateAPIView +from rest_framework.permissions import IsAuthenticated + +from apps.auth1.serializers import LoginSerializer +# Create your views here. + +class TokenBlackView(APIView): + permission_classes = [IsAuthenticated] + + def get(self, request, *args, **kwargs): # 可将token加入黑名单 + return Response(status=status.HTTP_200_OK) + +class LoginView(CreateAPIView): + authentication_classes = [] + permission_classes = [] + serializer_class = LoginSerializer + + def create(self, request, *args, **kwargs): + """ + 账户密码登录 + """ + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + vdata = serializer.validated_data + user = authenticate(username = vdata.get('username'), + password = vdata.get('password')) + if user is not None: + login(request, user) + return Response() + return Response('登录失败', status=status.HTTP_400_BAD_REQUEST) + +class LogoutView(APIView): + authentication_classes = [] + permission_classes = [] + + def post(self, request, *args, **kwargs): + """ + 退出登录 + """ + logout(request) + return Response() \ No newline at end of file diff --git a/hb_server/apps/develop/urls.py b/hb_server/apps/develop/urls.py index 79f8f04..22621ac 100644 --- a/hb_server/apps/develop/urls.py +++ b/hb_server/apps/develop/urls.py @@ -2,7 +2,7 @@ from django.db.models import base from rest_framework import urlpatterns from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.develop.views import CleanDataView, UpdateCuttingView, UpdateFIFOItem, UpdateLastTestResult, UpdateSpg +from apps.develop.views import CleanDataView, UpdateCuttingView, UpdateEquipState, UpdateFIFOItem, UpdateLastTestResult, UpdateSpg urlpatterns = [ path('cleandata/', CleanDataView.as_view()), @@ -10,6 +10,7 @@ urlpatterns = [ path('update_last_result/', UpdateLastTestResult.as_view()), path('update_last_result/', UpdateLastTestResult.as_view()), path('update_fifoitem/', UpdateFIFOItem.as_view()), - path('update_spg/', UpdateSpg.as_view()) + path('update_spg/', UpdateSpg.as_view()), + path('update_equip_state/', UpdateEquipState.as_view()) ] diff --git a/hb_server/apps/develop/views.py b/hb_server/apps/develop/views.py index f6a52fc..c1b5b84 100644 --- a/hb_server/apps/develop/views.py +++ b/hb_server/apps/develop/views.py @@ -11,6 +11,7 @@ from apps.sam.models import Order from apps.wf.models import Ticket from apps.wpm.models import Operation, OperationMaterial, WProduct, WproductFlow from apps.wpm.services import WpmServies +from apps.em.tasks import update_equip_state_by_next_check_date # Create your views here. class CleanDataView(APIView): @@ -91,3 +92,11 @@ class UpdateSpg(APIView): for i in SubProductionPlan.objects.filter(subproduction__process__id=1): WpmServies.update_subproduction_progress_main(sp=i) return Response() + + +class UpdateEquipState(APIView): + permission_classes = [IsAdminUser] + + def post(self, request, format=None): + update_equip_state_by_next_check_date() + return Response() \ No newline at end of file diff --git a/hb_server/apps/em/tasks.py b/hb_server/apps/em/tasks.py new file mode 100644 index 0000000..61ca3de --- /dev/null +++ b/hb_server/apps/em/tasks.py @@ -0,0 +1,13 @@ +from __future__ import absolute_import, unicode_literals + +from celery import shared_task +from django.utils import timezone + +from apps.em.models import Equipment + + +@shared_task +def update_equip_state_by_next_check_date(): + Equipment.objects.filter(next_check_date__lt=timezone.now()).update( + state = Equipment.EQUIP_STATE_DISABLE + ) \ No newline at end of file diff --git a/hb_server/apps/system/filters.py b/hb_server/apps/system/filters.py index 22ef179..cd3fde7 100644 --- a/hb_server/apps/system/filters.py +++ b/hb_server/apps/system/filters.py @@ -7,4 +7,4 @@ class UserFilter(DynamicFieldsFilterMixin, filters.FilterSet): name = filters.CharFilter(field_name='name', lookup_expr='contains') class Meta: model = User - fields = ['name', 'is_active'] \ No newline at end of file + fields = ['name', 'is_active', 'is_atwork'] \ No newline at end of file diff --git a/hb_server/apps/system/views.py b/hb_server/apps/system/views.py index 65a1320..9ef7c28 100644 --- a/hb_server/apps/system/views.py +++ b/hb_server/apps/system/views.py @@ -48,12 +48,6 @@ class TaskList(APIView): tasks = list(sorted(name for name in celery_app.tasks if not name.startswith('celery.'))) return Response(tasks) -class LogoutView(APIView): - permission_classes = [] - - def get(self, request, *args, **kwargs): # 可将token加入黑名单 - return Response(status=status.HTTP_200_OK) - class PTaskViewSet(OptimizationMixin, ModelViewSet): perms_map = {'get': '*', 'post': 'ptask_create', 'put': 'ptask_update', 'delete': 'ptask_delete'} diff --git a/hb_server/server/settings.py b/hb_server/server/settings.py index 5cf9d99..1d11566 100644 --- a/hb_server/server/settings.py +++ b/hb_server/server/settings.py @@ -48,6 +48,7 @@ INSTALLED_APPS = [ 'simple_history', 'apps.system', 'apps.monitor', + 'apps.auth1', 'apps.pum', 'apps.em', 'apps.hrm', diff --git a/hb_server/server/urls.py b/hb_server/server/urls.py index cad2e29..8b716a0 100644 --- a/hb_server/server/urls.py +++ b/hb_server/server/urls.py @@ -13,7 +13,7 @@ Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ -from apps.system.views import FileViewSet, LogoutView +from apps.system.views import FileViewSet from django.conf import settings from django.conf.urls.static import static from django.contrib import admin @@ -23,8 +23,6 @@ from drf_yasg import openapi from drf_yasg.views import get_schema_view from rest_framework import routers from rest_framework.documentation import include_docs_urls -from rest_framework_simplejwt.views import (TokenObtainPairView, - TokenRefreshView) from django.views.generic import TemplateView from utils.view import GenSignature, UpdateDevelop @@ -53,12 +51,10 @@ urlpatterns = [ path('api/redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'), # api - path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'), - path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'), - path('api/token/black/', LogoutView.as_view(), name='token_black'), path('api/file/', include(router.urls)), path('api/system/', include('apps.system.urls')), path('api/monitor/', include('apps.monitor.urls')), + path('api/auth/', include('apps.auth1.urls')), path('api/pum/', include('apps.pum.urls')), path('api/em/', include('apps.em.urls')), path('api/hrm/', include('apps.hrm.urls')),