├── ruidun_system ├── db │ ├── __init__.py │ ├── drop_mapping.sql │ └── base_model.py ├── staff │ ├── views.py │ ├── viewsets │ │ ├── __init__.py │ │ ├── team_viewset.py │ │ ├── jobstation_viewset.py │ │ ├── trades_viewset.py │ │ ├── user_departement_viewset.py │ │ ├── folk_viewset.py │ │ ├── department_viewset.py │ │ ├── check_staff_name.py │ │ ├── usermouthwork_viewset.py │ │ ├── project_viewset.py │ │ ├── company_viewset.py │ │ ├── departmentwork_viewset.py │ │ └── part_viewset.py │ ├── serializers │ │ ├── __init__.py │ │ ├── jobstation_serializer.py │ │ ├── team_serializer.py │ │ ├── user_department_serializer.py │ │ ├── trades_serializer.py │ │ ├── folk_serializer.py │ │ ├── company_serializer.py │ │ ├── project_serializer.py │ │ ├── part_serializer.py │ │ ├── departmentwork_serializer.py │ │ └── usermouthwork_detail_serialzer.py │ ├── __init__.py │ ├── tests.py │ └── apps.py ├── bim │ ├── __init__.py │ ├── crud │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── admin.py │ ├── views.py │ └── apps.py ├── help │ ├── __init__.py │ ├── crud │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ ├── admin.py │ ├── views.py │ └── apps.py ├── lib │ ├── __init__.py │ ├── log_middleware.py │ ├── model_viewset.py │ └── user_permission.py ├── safe │ ├── __init__.py │ ├── serializers │ │ ├── __init__.py │ │ ├── dangerouscategory_serializer.py │ │ ├── dangername_serializer.py │ │ ├── method_serializer.py │ │ ├── priorscheme_serializer.py │ │ ├── specialscheme_serializer.py │ │ └── dangerused_serializer.py │ ├── viewsets │ │ ├── __init__.py │ │ ├── dangerouscategory_viewset.py │ │ ├── method_viewset.py │ │ └── dangername_viewset.py │ ├── tests.py │ ├── admin.py │ ├── apps.py │ ├── views.py │ ├── urls.py │ └── fixtures │ │ └── dangers.json ├── search │ ├── __init__.py │ ├── models.py │ ├── admin.py │ ├── tests.py │ ├── views.py │ └── apps.py ├── auth_system │ ├── __init__.py │ ├── admin.py │ ├── tests.py │ ├── apps.py │ ├── views.py │ └── user_serializer.py ├── base_system │ ├── views.py │ ├── serializers.py │ ├── __init__.py │ ├── pagination.py │ ├── wsgi.py │ └── urls.py ├── equipment │ ├── __init__.py │ ├── serializers │ │ ├── __init__.py │ │ ├── equipmentlocation_seriallizer.py │ │ ├── equipmentupkeep_serializer.py │ │ ├── equipmentrepair_serializer.py │ │ └── equipmentused_serializer.py │ ├── viewsets │ │ ├── __init__.py │ │ ├── equipmentrepair_viewset.py │ │ ├── equipmentuser_viewset.py │ │ ├── equipmentlocation_viewset.py │ │ ├── equipmentinfo_viewset.py │ │ └── equipmentupkeep_viewset.py │ ├── tests.py │ ├── admin.py │ ├── views.py │ ├── apps.py │ └── urls.py ├── work_area │ ├── __init__.py │ ├── serializers │ │ ├── __init__.py │ │ ├── team_serializer.py │ │ ├── department_serializer.py │ │ ├── staffbreak_serializer.py │ │ ├── staffstatus_serializer.py │ │ ├── carbreak_serializer.py │ │ ├── carrecord_serializer.py │ │ └── staffrecord_serializer.py │ ├── viewsets │ │ ├── __init__.py │ │ ├── staffbreak_viewset.py │ │ ├── carbreak_viewset.py │ │ ├── department_viewset.py │ │ ├── open_carbreak_view.py │ │ ├── open_staffbreak_view.py │ │ ├── deviceinfo_viewset.py │ │ ├── team_viewset.py │ │ ├── staffrecord_viewset.py │ │ └── carrecord_viewset.py │ ├── tests.py │ ├── views.py │ ├── admin.py │ ├── apps.py │ ├── fixtures │ │ ├── staff_record.json │ │ └── car_record.json │ └── urls.py ├── bridge_and_tunnel │ ├── __init__.py │ ├── models.py │ ├── admin.py │ ├── tests.py │ ├── apps.py │ ├── urls.py │ └── views.py ├── internet_operate │ ├── __init__.py │ ├── models.py │ ├── admin.py │ ├── tests.py │ ├── apps.py │ ├── urls.py │ ├── views.py │ └── viewsets │ │ ├── get_monitoring_viewset.py │ │ ├── ipswitch_viewset.py │ │ ├── speaker_viewset.py │ │ └── led_viewset.py ├── internet_setting │ ├── __init__.py │ ├── viewsets │ │ ├── __init__.py │ │ ├── bstaion_viewset.py │ │ ├── led_programme_viewset.py │ │ ├── staff_location_viewset.py │ │ ├── location_card_viewset.py │ │ ├── device_info_viewset.py │ │ ├── ipswitch_detail_viewset.py │ │ ├── music_viewset.py │ │ ├── device_upkeep_viewset.py │ │ ├── device_category_viewset.py │ │ ├── voice_viewset.py │ │ ├── car_pass_viewset.py │ │ ├── caution_record_viewset.py │ │ ├── led_viewset.py │ │ ├── monitor_viewset.py │ │ ├── staff_pass_viewset.py │ │ └── voice_server_viewset.py │ ├── serializers │ │ ├── __init__.py │ │ ├── bstation_serializer.py │ │ ├── music_serializer.py │ │ ├── caution_record_serializer.py │ │ ├── device_category_serializer.py │ │ ├── staff_location_serializer.py │ │ ├── staff_pass_serializer.py │ │ ├── voice_server_serializer.py │ │ ├── led_programme_serializer.py │ │ ├── location_card_serializer.py │ │ ├── device_upkeep_serializer.py │ │ ├── ipswitch_detail_serializer.py │ │ ├── ipswitch_serializer.py │ │ ├── monitor_serializer.py │ │ ├── voice_serializer.py │ │ ├── car_pass_serializer.py │ │ └── led_serializer.py │ ├── admin.py │ ├── tests.py │ ├── apps.py │ ├── views.py │ └── fixtures │ │ └── staff_pass.json ├── system_manage │ ├── __init__.py │ ├── tests.py │ ├── admin.py │ ├── views.py │ ├── apps.py │ ├── serializers │ │ ├── permission_serializer.py │ │ ├── extra_group_serializer.py │ │ ├── artificial_log_category_serializer.py │ │ ├── password_serializer.py │ │ ├── group_serializer.py │ │ └── artificial_log_serializer.py │ ├── viewsets │ │ ├── artificial_log_category_viewset.py │ │ └── artificial_log_viewset.py │ ├── urls.py │ ├── models.py │ └── fixtures │ │ └── system_manage.json ├── cfg.ini ├── .idea │ ├── dataSources │ │ └── a11e133e-dd51-4800-9178-590ee20cee02 │ │ │ └── storage_v2 │ │ │ └── _src_ │ │ │ └── schema │ │ │ ├── ruidun.t3UqyQ.meta │ │ │ └── ruidun.t3UqyQ.zip │ ├── modules.xml │ ├── misc.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── dataSources.local.xml │ ├── dataSources.xml │ └── ruidun_system.iml ├── common │ ├── cfg - demo.ini │ └── dbdemo.py ├── Dockerfile ├── manage.py ├── docker-compose.yml ├── README.md ├── package.json ├── requirements.txt ├── huanjing.txt ├── client │ ├── ipvoice.py │ └── ipswitch.py └── .gitignore └── README.md /ruidun_system/db/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/staff/views.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/bim/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/help/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/lib/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/safe/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/search/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/auth_system/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/base_system/views.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/bim/crud/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/equipment/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/help/crud/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/work_area/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/base_system/serializers.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/safe/viewsets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/equipment/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/equipment/viewsets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/__init__.py: -------------------------------------------------------------------------------- 1 | from .company_viewset import * -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | from .company_serializer import * 2 | -------------------------------------------------------------------------------- /ruidun_system/base_system/__init__.py: -------------------------------------------------------------------------------- 1 | import pymysql 2 | pymysql.install_as_MySQLdb() -------------------------------------------------------------------------------- /ruidun_system/staff/__init__.py: -------------------------------------------------------------------------------- 1 | default_app_config = 'staff.apps.FunctionAndOrgConfig' -------------------------------------------------------------------------------- /ruidun_system/bim/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/bim/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/help/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/help/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/safe/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/search/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/staff/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/bim/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/bim/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /ruidun_system/cfg.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocatwy/django-restframework/HEAD/ruidun_system/cfg.ini -------------------------------------------------------------------------------- /ruidun_system/equipment/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/help/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/help/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /ruidun_system/safe/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/search/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/search/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/search/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /ruidun_system/work_area/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/work_area/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. -------------------------------------------------------------------------------- /ruidun_system/auth_system/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/auth_system/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/equipment/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | # Create your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/work_area/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/equipment/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | 5 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | # Register your models here. 4 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | -------------------------------------------------------------------------------- /ruidun_system/.idea/dataSources/a11e133e-dd51-4800-9178-590ee20cee02/storage_v2/_src_/schema/ruidun.t3UqyQ.meta: -------------------------------------------------------------------------------- 1 | #n:ruidun -------------------------------------------------------------------------------- /ruidun_system/common/cfg - demo.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocatwy/django-restframework/HEAD/ruidun_system/common/cfg - demo.ini -------------------------------------------------------------------------------- /ruidun_system/auth_system/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AuthSystemConfig(AppConfig): 5 | name = 'auth_system' 6 | -------------------------------------------------------------------------------- /ruidun_system/bim/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BimConfig(AppConfig): 5 | name = 'bim' 6 | verbose_name = "bim接口" 7 | -------------------------------------------------------------------------------- /ruidun_system/help/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class HelpConfig(AppConfig): 5 | name = 'help' 6 | verbose_name = "帮助" 7 | -------------------------------------------------------------------------------- /ruidun_system/safe/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SafeConfig(AppConfig): 5 | name = 'safe' 6 | verbose_name = "安全管理" 7 | -------------------------------------------------------------------------------- /ruidun_system/search/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SearchConfig(AppConfig): 5 | name = 'search' 6 | verbose_name = "查询中心" 7 | -------------------------------------------------------------------------------- /ruidun_system/staff/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | class FunctionAndOrgConfig(AppConfig): 4 | name = 'staff' 5 | verbose_name = "人员管理" 6 | -------------------------------------------------------------------------------- /ruidun_system/equipment/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class EquipmentConfig(AppConfig): 5 | name = 'equipment' 6 | verbose_name = "工程设备管理" 7 | -------------------------------------------------------------------------------- /ruidun_system/work_area/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class WorkAreaConfig(AppConfig): 5 | name = 'work_area' 6 | verbose_name = "工区管理" 7 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class SystemManageConfig(AppConfig): 5 | name = 'system_manage' 6 | verbose_name = "系统管理" 7 | -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BridgeAndTunnelConfig(AppConfig): 5 | name = 'bridge_and_tunnel' 6 | verbose_name = "桥隧管理" 7 | -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import include, path 2 | from . import views 3 | 4 | urlpatterns = [ 5 | path('bandtindex', views.bandtindex, name='bandtindex'), 6 | ] -------------------------------------------------------------------------------- /ruidun_system/internet_operate/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class InternetOperateConfig(AppConfig): 5 | name = 'internet_operate' 6 | verbose_name = "物联网硬件系统" 7 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class InternetSettingConfig(AppConfig): 5 | name = 'internet_setting' 6 | verbose_name = "物联网硬件设置" 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # django-restframework 2 | 前后端分离,使用restfarmework作为django的接口规范,vue作为前端开发,前期从0到1开发系统,后期偏向硬件,使软件控制ip硬件,包括led,开关,道闸,拉取定位信息,视频推流(rtmp)等开发测试服务器: 3 | ##### 项目地址:http://47.92.26.15:8050/static/index.html#/home 4 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import include, path 2 | from . import viewsets 3 | 4 | urlpatterns = [ 5 | path('internetindex', viewsets.internetindex, name='internetindex'), 6 | ] -------------------------------------------------------------------------------- /ruidun_system/safe/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | 5 | 6 | def safeindex(request): 7 | """安全管理二级菜单""" 8 | 9 | return render(request, 'safeindex.html') -------------------------------------------------------------------------------- /ruidun_system/bridge_and_tunnel/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | 5 | def bandtindex(request): 6 | """桥隧二级菜单""" 7 | 8 | return render(request, 'bandtindex.html') -------------------------------------------------------------------------------- /ruidun_system/internet_setting/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | 5 | 6 | def settingindex(request): 7 | """设置二级菜单""" 8 | 9 | return render(request, 'settingindex.html') -------------------------------------------------------------------------------- /ruidun_system/internet_operate/views.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | 3 | # Create your views here. 4 | 5 | 6 | def internetindex(request): 7 | """物联网硬件管理系统二级菜单""" 8 | 9 | return render(request, 'internetindex.html') -------------------------------------------------------------------------------- /ruidun_system/base_system/pagination.py: -------------------------------------------------------------------------------- 1 | from rest_framework.pagination import PageNumberPagination 2 | 3 | 4 | class StandardPageNumberPagination(PageNumberPagination): 5 | page_size_query_param = 'page_size' 6 | max_page_size = 10000 7 | -------------------------------------------------------------------------------- /ruidun_system/db/drop_mapping.sql: -------------------------------------------------------------------------------- 1 | drop trigger carrecord; 2 | drop trigger locationcard; 3 | drop trigger staff; 4 | drop trigger LED; 5 | drop trigger staffrecord; 6 | drop trigger carinfo; 7 | drop trigger bstation; 8 | drop trigger userworks; 9 | drop trigger department; -------------------------------------------------------------------------------- /ruidun_system/.idea/dataSources/a11e133e-dd51-4800-9178-590ee20cee02/storage_v2/_src_/schema/ruidun.t3UqyQ.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xiaocatwy/django-restframework/HEAD/ruidun_system/.idea/dataSources/a11e133e-dd51-4800-9178-590ee20cee02/storage_v2/_src_/schema/ruidun.t3UqyQ.zip -------------------------------------------------------------------------------- /ruidun_system/common/dbdemo.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | import pymysql as MySQLdb 3 | from DBUtils.PooledDB import PooledDB 4 | import common.mydb as mydb 5 | from common.mydb import DB 6 | 7 | mydb = DB() 8 | SQL = "select * from test" 9 | data=mydb.query(SQL) 10 | print(data) 11 | 12 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/viewsets/get_monitoring_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import viewsets 2 | 3 | 4 | class GetMonitoringViewSet(viewsets.ReadOnlyModelViewSet): 5 | 6 | def retrieve(self, request, *args, **kwargs): 7 | # 获取视频内容,视频应该是实时传输的,这里应该怎么返回数据? 8 | pass 9 | -------------------------------------------------------------------------------- /ruidun_system/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/bstation_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from internet_setting.models import BsTation 3 | 4 | 5 | class BsTaionSerializer(serializers.ModelSerializer): 6 | 7 | class Meta: 8 | model = BsTation 9 | fields = '__all__' 10 | 11 | -------------------------------------------------------------------------------- /ruidun_system/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/team_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | 3 | from ..models import Team 4 | from ..serializers.team_serializer import TeamSerializer 5 | 6 | 7 | class TeamViewset(ModelViewSet): 8 | """施工组信息""" 9 | queryset = Team.objects.all() 10 | serializer_class = TeamSerializer -------------------------------------------------------------------------------- /ruidun_system/system_manage/serializers/permission_serializer.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.models import Permission 2 | from rest_framework import serializers 3 | 4 | 5 | # class PermissionSerializer(serializers.ModelSerializer): 6 | # class Meta: 7 | # model = Permission 8 | # fields = ('id', 'content_type', 'name') 9 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/serializers/extra_group_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from auth_system.models import ExtraGroup 4 | 5 | 6 | class ExtraGroupSerializer(serializers.ModelSerializer): 7 | 8 | class Meta: 9 | model = ExtraGroup 10 | fields = ["note", "index", "is_used"] 11 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/jobstation_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | 3 | from ..models import JobStation 4 | from ..serializers.jobstation_serializer import JobStationSerializer 5 | 6 | 7 | class JobStationViewset(ModelViewSet): 8 | """岗位信息""" 9 | queryset = JobStation.objects.filter(is_used=1) 10 | serializer_class = JobStationSerializer -------------------------------------------------------------------------------- /ruidun_system/internet_operate/viewsets/ipswitch_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.decorators import action 3 | from rest_framework.response import Response 4 | from rest_framework.viewsets import ViewSet, ModelViewSet 5 | 6 | from client.ipswitch import Client 7 | 8 | 9 | class IPSwitchViewSet(ModelViewSet): 10 | """控制ip开关接口""" 11 | 12 | pass 13 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/trades_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | 3 | from ..models import Trades 4 | from ..serializers.trades_serializer import TradesSerializer 5 | 6 | 7 | class TradesViewset(ModelViewSet): 8 | """施工组信息""" 9 | 10 | queryset = Trades.objects.filter(is_used=1) 11 | serializer_class = TradesSerializer 12 | filter_fields = ('trades_name',) -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/team_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from staff.models import Team 3 | 4 | 5 | class TeamSerializer(serializers.ModelSerializer): 6 | """班组序列化器""" 7 | staff_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) 8 | 9 | class Meta: 10 | model = Team 11 | fields = ('id', 'name', 'staff_set') 12 | 13 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/staffbreak_viewset.py: -------------------------------------------------------------------------------- 1 | from ..models import StaffBreak 2 | from ..serializers.staffbreak_serializer import StaffBreakSerializer 3 | from lib.model_viewset import ModelViewSet 4 | 5 | 6 | class StaffBreakViewset(ModelViewSet): 7 | """人员道闸""" 8 | 9 | queryset = StaffBreak.objects.filter(is_used=1) 10 | serializer_class = StaffBreakSerializer 11 | filter_fields = ('part_id',) -------------------------------------------------------------------------------- /ruidun_system/safe/viewsets/dangerouscategory_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | from ..models import DangerousCategory 3 | from ..serializers.dangerouscategory_serializer import DangerousCategorySerializer 4 | 5 | 6 | class DangerousCategoryViewset(ModelViewSet): 7 | """危险物品分类序列化器""" 8 | 9 | queryset = DangerousCategory.objects.filter(is_used=1) 10 | serializer_class = DangerousCategorySerializer -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/user_departement_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | 3 | from auth_system.models import User_Department 4 | from ..serializers.user_department_serializer import UserDepartementSerializer 5 | 6 | 7 | class UserDepartementViewset(ModelViewSet): 8 | """施工组信息""" 9 | 10 | queryset = User_Department.objects.filter(is_used=1) 11 | serializer_class = UserDepartementSerializer -------------------------------------------------------------------------------- /ruidun_system/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3 2 | ENV PYTHONUNBUFFERED 1 3 | RUN apt-get update -qq && apt-get install build-essential g++ flex bison gperf ruby perl \ 4 | mysql-client \ 5 | libfontconfig1-dev libicu-dev libfreetype6 libssl-dev \ 6 | libpng-dev libjpeg-dev python libx11-dev libxext-dev -y 7 | RUN mkdir /code 8 | WORKDIR /code 9 | ADD requirements.txt /code/ 10 | RUN pip install -r requirements.txt 11 | ADD . /code/ 12 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/serializers/artificial_log_category_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from system_manage.models import ArtificialLogCategory 4 | 5 | 6 | class ArtificialLogCategorySerializer(serializers.ModelSerializer): 7 | note = serializers.SerializerMethodField() 8 | permission_ids = serializers.ListField(write_only=True) 9 | 10 | class Meta: 11 | model = ArtificialLogCategory 12 | fields = "__all__" 13 | -------------------------------------------------------------------------------- /ruidun_system/base_system/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for base_system project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'base_system.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/viewsets/artificial_log_category_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | from system_manage.models import ArtificialLogCategory 3 | from system_manage.serializers.artificial_log_category_serializer import ArtificialLogCategorySerializer 4 | 5 | 6 | class ArtificialLogCategoryViewSet(ModelViewSet): 7 | """人工日志类视图""" 8 | 9 | serializer_class = ArtificialLogCategorySerializer 10 | queryset = ArtificialLogCategory.objects.filter(is_used=1).all() 11 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/carbreak_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework.response import Response 2 | 3 | from ..models import CarBreak 4 | from ..serializers.carbreak_serializer import CarBreakSerializer 5 | from lib.model_viewset import ModelViewSet 6 | 7 | 8 | class CarBreakViewset(ModelViewSet): 9 | """车辆道闸 10 | 11 | get: 12 | 获取全部道闸信息 13 | 14 | """ 15 | queryset = CarBreak.objects.filter(is_used=1) 16 | serializer_class = CarBreakSerializer 17 | filter_fields = ('part_id', ) -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/department_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | from rest_framework.filters import OrderingFilter 3 | from django_filters import rest_framework as filters 4 | 5 | from staff.models import Department 6 | from work_area.serializers.department_serializer import DepartmentSerializer 7 | 8 | 9 | class DepartmentViewset(ModelViewSet): 10 | """施工班组""" 11 | 12 | # TODO 等待传入当前工区id 13 | # part_id = 2 14 | queryset = Department.objects.all() 15 | serializer_class = DepartmentSerializer -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/department_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from staff.models import Department 3 | 4 | 5 | class DepartmentSerializer(serializers.ModelSerializer): 6 | """班组序列化器""" 7 | # staff_set = serializers.PrimaryKeyRelatedField(read_only=True, many=True) 8 | department = serializers.SerializerMethodField() 9 | 10 | class Meta: 11 | model = Department 12 | fields = ('id', 'department') 13 | 14 | def get_department(self, obj): 15 | 16 | return obj.department + '/' + obj.group_name -------------------------------------------------------------------------------- /ruidun_system/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == '__main__': 6 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'base_system.settings') 7 | try: 8 | from django.core.management import execute_from_command_line 9 | except ImportError as exc: 10 | raise ImportError( 11 | "Couldn't import Django. Are you sure it's installed and " 12 | "available on your PYTHONPATH environment variable? Did you " 13 | "forget to activate a virtual environment?" 14 | ) from exc 15 | execute_from_command_line(sys.argv) 16 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/bstaion_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework import viewsets 5 | 6 | from internet_setting.models import BsTation 7 | from internet_setting.serializers.bstation_serializer import BsTaionSerializer 8 | 9 | 10 | class BsTaionViewSet(viewsets.ReadOnlyModelViewSet): 11 | """ 12 | A simple ViewSet for viewing and editing accounts. 13 | """ 14 | queryset = BsTation.objects.all() 15 | serializer_class = BsTaionSerializer 16 | filter_fields = ("part_id",) -------------------------------------------------------------------------------- /ruidun_system/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | -------------------------------------------------------------------------------- /ruidun_system/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | api: 5 | build: . 6 | command: python3 ./manage.py runserver 0.0.0.0:8000 7 | 8 | #依赖库发生变化时,重新安装 9 | #command: docker-compose run api pip install -r requirements.txt --user --upgrade 10 | 11 | volumes: 12 | - .:/code 13 | ports: 14 | - "9080:8000" 15 | 16 | environment: 17 | PYTHONUSERBASE: /code/vendor 18 | depends_on: 19 | - db 20 | 21 | db: 22 | image: mysql:5.6 23 | environment: 24 | MYSQL_ROOT_PASSWORD: 123456 25 | ports: 26 | - "3343:3306" 27 | volumes: 28 | - ruidun_data:/var/lib/mysql 29 | 30 | volumes: 31 | ruidun_data: -------------------------------------------------------------------------------- /ruidun_system/internet_setting/fixtures/staff_pass.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "model": "internet_setting.staffpass", 4 | "pk": "1", 5 | "fields": { 6 | "code": "1", 7 | "staff": "1", 8 | "status": 1, 9 | "time": "2019-03-12T13:52:08.604Z" 10 | } 11 | }, 12 | { 13 | "model": "internet_setting.staffpass", 14 | "pk": "2", 15 | "fields": { 16 | "code": "2", 17 | "staff": "2", 18 | "status": 1, 19 | "time": "2019-03-12T13:52:10.245Z" 20 | } 21 | }, 22 | { 23 | "model": "internet_setting.staffpass", 24 | "pk": "3", 25 | "fields": { 26 | "code": "3", 27 | "staff": "3", 28 | "status": 0, 29 | "time": "2019-03-10T13:52:12.275Z" 30 | } 31 | } 32 | ] -------------------------------------------------------------------------------- /ruidun_system/README.md: -------------------------------------------------------------------------------- 1 | # fengkong_new 2 | 3 | #### 项目介绍 4 | 风险管控提示平台新版 5 | 6 | #### 软件架构 7 | 软件架构说明 8 | 9 | 10 | #### 安装教程 11 | 12 | 1. xxxx 13 | 2. xxxx 14 | 3. xxxx 15 | 16 | #### 使用说明 17 | 18 | 1. xxxx 19 | 2. xxxx 20 | 3. xxxx 21 | 22 | #### 参与贡献 23 | 24 | 1. Fork 本项目 25 | 2. 新建 Feat_xxx 分支 26 | 3. 提交代码 27 | 4. 新建 Pull Request 28 | 29 | 30 | #### 码云特技 31 | 32 | 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 33 | 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 34 | 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 35 | 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 36 | 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 37 | 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/music_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from internet_setting.models import Music 6 | 7 | 8 | class MusicSerializer(serializers.ModelSerializer): 9 | class Meta: 10 | model = Music 11 | exclude = ("is_used",) 12 | extra_kwargs = { 13 | "id": {"read_only": True}, 14 | } 15 | 16 | def create(self, validated_data): 17 | pk = uuid.uuid4() 18 | return Music.objects.create(pk=pk, **validated_data) 19 | 20 | def update(self, instance, validated_data): 21 | instance.note = validated_data.get("note", instance.note) 22 | instance.path = validated_data.get("path", instance.path) 23 | 24 | instance.save() 25 | return instance 26 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/caution_record_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from internet_setting.models import CautionRecord 4 | 5 | 6 | class CautionRecordSerializer(serializers.ModelSerializer): 7 | 8 | device = serializers.SlugRelatedField(slug_field="name", read_only=True) 9 | device_id = serializers.CharField() 10 | disposer_id = serializers.CharField() 11 | disposer = serializers.SlugRelatedField(slug_field="name", read_only=True) 12 | category = serializers.SerializerMethodField() 13 | 14 | class Meta: 15 | model = CautionRecord 16 | fields = '__all__' 17 | extra_kwargs = { 18 | "id": {"read_only": True} 19 | } 20 | 21 | def get_category(self, obj): 22 | return obj.device.category.name 23 | 24 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/folk_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | import django_filters as filters 3 | from ..models import Folk 4 | from ..serializers.folk_serializer import FolkSerializer 5 | 6 | 7 | 8 | class FolkFilter(filters.FilterSet): 9 | create_time = filters.DateTimeFilter(field_name="create_time", lookup_expr='gte') 10 | update_time = filters.DateTimeFilter(field_name="update_time", lookup_expr='lte') 11 | staff_name = filters.CharFilter(field_name="staff_id", lookup_expr="name") 12 | 13 | class Meta: 14 | model = Folk 15 | fields = ["create_time", "update_time", "staff_name", "name"] 16 | 17 | 18 | class FolkViewset(ModelViewSet): 19 | """人员家属信息""" 20 | queryset = Folk.objects.all() 21 | serializer_class = FolkSerializer 22 | filterset_class = FolkFilter -------------------------------------------------------------------------------- /ruidun_system/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xitongguanli", 3 | "version": "1.0.0", 4 | "description": "系统权限控制模板", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://gitee.com/e3rong/xitongguanli.git" 12 | }, 13 | "author": "cheng.donghui@gmail.com", 14 | "license": "ISC", 15 | "devDependencies": { 16 | "autoprefixer": "^7.1.2", 17 | "babel-preset-es2015": "^6.24.1", 18 | "babelify": "^7.3.0", 19 | "browserify": "^14.4.0", 20 | "node-sass": "^4.5.3", 21 | "postcss-cli": "^4.1.0" 22 | }, 23 | "dependencies": { 24 | "admin-lte": "", 25 | "animate.css": "^3.7.0", 26 | "hamburgers": "^0.9.3", 27 | "select2": "^4.0.6-rc.1", 28 | "popper.js": "^1.14.4", 29 | "tilt.js": "1.2.1" 30 | } 31 | } -------------------------------------------------------------------------------- /ruidun_system/.idea/dataSources.local.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #@ 7 | ` 8 | 9 | 10 | master_key 11 | root 12 | *:@ 13 | 14 | 15 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/led_programme_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | import django_filters as filters 3 | from ..models import LedProgramme 4 | from internet_setting.serializers.led_programme_serializer import LedProgrammeSerializer 5 | 6 | 7 | # class FolkFilter(filters.FilterSet): 8 | # create_time = filters.DateTimeFilter(field_name="create_time", lookup_expr='gte') 9 | # update_time = filters.DateTimeFilter(field_name="update_time", lookup_expr='lte') 10 | # staff_name = filters.CharFilter(field_name="staff_id", lookup_expr="name") 11 | # 12 | # class Meta: 13 | # model = LedProgramme 14 | # fields = ["create_time", "update_time", "staff_name", "name"] 15 | 16 | 17 | class LedProgrammeViewset(ModelViewSet): 18 | 19 | """LED节目信息""" 20 | queryset = LedProgramme.objects.all() 21 | serializer_class = LedProgrammeSerializer 22 | # filterset_class = FolkFilter -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/dangerouscategory_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | from rest_framework import serializers 3 | from ..models import DangerousCategory 4 | 5 | 6 | class DangerousCategorySerializer(serializers.ModelSerializer): 7 | """危险物品分类序列化器(搜索字段)""" 8 | 9 | # id = serializers.IntegerField(read_only=True) 10 | 11 | class Meta: 12 | model = DangerousCategory 13 | exclude = ('create_time', 'update_time') 14 | extra_kwargs = { 15 | 'id': {'required': False} 16 | } 17 | 18 | def create(self, validated_data): 19 | """新建""" 20 | pk = uuid.uuid4() 21 | return DangerousCategory.objects.create(pk=pk, **validated_data) 22 | 23 | def update(self, instance, validated_data): 24 | """更新,instance为要更新的对象实例""" 25 | instance.name = validated_data.get('name', instance.name) 26 | instance.save() 27 | return instance -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/device_category_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from internet_setting.models import DeviceCategory 6 | 7 | 8 | class DeviceCategorySerializer(serializers.ModelSerializer): 9 | class Meta: 10 | model = DeviceCategory 11 | fields = '__all__' 12 | extra_kwargs = { 13 | "id": {"read_only": True}, 14 | } 15 | 16 | def create(self, validated_data): 17 | pk = uuid.uuid4() 18 | return DeviceCategory.objects.create(pk=pk, **validated_data) 19 | 20 | def update(self, instance, validated_data): 21 | instance.name = validated_data.get("name", instance.name) 22 | instance.index = validated_data.get("index", instance.index) 23 | instance.is_used = validated_data.get("is_used", instance.is_used) 24 | 25 | instance.save() 26 | return instance 27 | -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/jobstation_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from staff.models import JobStation 5 | 6 | 7 | class JobStationSerializer(serializers.ModelSerializer): 8 | class Meta: 9 | model = JobStation 10 | fields = '__all__' 11 | extra_kwargs = { 12 | "id": {"required": False} 13 | } 14 | 15 | def create(self, validated_data): 16 | """新建""" 17 | validated_data['id'] = uuid.uuid4() 18 | return JobStation.objects.create(**validated_data) 19 | 20 | def update(self, instance, validated_data): 21 | """更新,instance为要更新的对象实例""" 22 | instance.name = validated_data.get('name', instance.name) 23 | instance.index = validated_data.get('index', instance.index) 24 | instance.is_used = validated_data.get('is_used', instance.is_used) 25 | instance.save() 26 | return instance -------------------------------------------------------------------------------- /ruidun_system/lib/log_middleware.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | from django.utils.deprecation import MiddlewareMixin 3 | 4 | 5 | class LogMiddleware(MiddlewareMixin): 6 | 7 | def process_request(self, request): 8 | print(type(request)) 9 | 10 | def process_response(self, request, response): 11 | # print(request) 12 | # print(response) 13 | # 记录增删改的操作 14 | print(type(request)) 15 | # if request.method == "POST": 16 | # category = "增加数据" 17 | # elif request.method == "PUT": 18 | # category = "修改数据" 19 | # elif request.method == "DELETE": 20 | # category = "删除数据" 21 | # else: 22 | # return response 23 | # # object = request.view.serializer_class.Meta.Model.Meta.verbose_name 24 | # user = request.user.username 25 | # time = datetime.datetime.now() 26 | # print(category, user, time) 27 | return response -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/staffbreak_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from ..models import StaffBreak 5 | 6 | 7 | class StaffBreakSerializer(serializers.ModelSerializer): 8 | """人员道闸序列化器""" 9 | 10 | class Meta: 11 | model = StaffBreak 12 | fields = '__all__' 13 | extra_kwargs = { 14 | 'id': {'required': False} 15 | } 16 | 17 | def create(self, validated_data): 18 | """新建""" 19 | pk = uuid.uuid4() 20 | return StaffBreak.objects.create(pk=pk, **validated_data) 21 | 22 | def update(self, instance, validated_data): 23 | """更新,instance为要更新的对象实例""" 24 | instance.id = validated_data.get('id', instance.id) 25 | instance.part_id = validated_data.get('part_id', instance.part_id) 26 | instance.name = validated_data.get('name', instance.name) 27 | instance.save() 28 | return instance -------------------------------------------------------------------------------- /ruidun_system/.idea/dataSources.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | mysql 6 | true 7 | com.mysql.jdbc.Driver 8 | jdbc:mysql://47.92.26.15:3306/ruidun 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/team_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from staff.models import Team 5 | 6 | """施工组序列化""" 7 | class TeamSerializer(serializers.ModelSerializer): 8 | class Meta: 9 | model = Team 10 | fields = '__all__' 11 | extra_kwargs = { 12 | "id": {"required": False}, 13 | "name": {"required": False} 14 | } 15 | 16 | def create(self, validated_data): 17 | """新建""" 18 | validated_data['id'] = uuid.uuid4() 19 | return Team.objects.create(**validated_data) 20 | 21 | def update(self, instance, validated_data): 22 | """更新,instance为要更新的对象实例""" 23 | 24 | instance.name = validated_data.get('name', instance.name) 25 | instance.index = validated_data.get('index', instance.index) 26 | instance.is_used = validated_data.get('is_used', instance.is_used) 27 | instance.save() 28 | return instance -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/user_department_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from auth_system.models import User_Department 5 | 6 | 7 | class UserDepartementSerializer(serializers.ModelSerializer): 8 | class Meta: 9 | model = User_Department 10 | fields = '__all__' 11 | extra_kwargs = { 12 | "id": {"required": False}, 13 | "name": {"required": False} 14 | } 15 | 16 | def create(self, validated_data): 17 | """新建""" 18 | return User_Department.objects.create(pk=uuid.uuid4(), **validated_data) 19 | 20 | def update(self, instance, validated_data): 21 | """更新,instance为要更新的对象实例""" 22 | 23 | instance.name = validated_data.get('name', instance.name) 24 | instance.index = validated_data.get('index', instance.index) 25 | instance.is_used = validated_data.get('is_used', instance.is_used) 26 | instance.save() 27 | return instance -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/staff_location_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from internet_setting.models import StaffLocation 4 | 5 | 6 | class StaffLocationSerializer(serializers.ModelSerializer): 7 | """工程车辆定位记录序列化器(暂时只有查询)""" 8 | # location_card_id = serializers.CharField(allow_null=True, required=False) 9 | 10 | 11 | class Meta: 12 | model = StaffLocation 13 | exclude = ["id"] 14 | extra_kwargs = { 15 | 16 | } 17 | 18 | def get_equipment_name(self, obj): 19 | return obj.location_card.equipment.name 20 | 21 | def get_company_name(self, obj): 22 | return obj.location_card.equipment.company.name 23 | 24 | def get_model_name(self, obj): 25 | return obj.location_card.equipment.model.name 26 | 27 | def get_user_name(self, obj): 28 | user_id = EquipmentUsed.objects.get(id=obj.location_card.equipment_id).user_id 29 | return Staff.objects.get(id=user_id).name -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/trades_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | from rest_framework import serializers 3 | from staff.models import Trades 4 | 5 | 6 | class TradesSerializer(serializers.ModelSerializer): 7 | 8 | class Meta: 9 | model = Trades 10 | fields = '__all__' 11 | extra_kwargs = { 12 | "id": {"required": False}, 13 | "colour": {"required": False} 14 | } 15 | 16 | def create(self, validated_data): 17 | """新建""" 18 | return Trades.objects.create(pk=uuid.uuid4(), **validated_data) 19 | 20 | def update(self, instance, validated_data): 21 | """更新,instance为要更新的对象实例""" 22 | 23 | instance.trades_name = validated_data.get('trades_name', instance.trades_name) 24 | instance.colour = validated_data.get('colour', instance.colour) 25 | instance.index = validated_data.get('index', instance.index) 26 | instance.is_used = validated_data.get('is_used', instance.is_used) 27 | instance.save() 28 | return instance -------------------------------------------------------------------------------- /ruidun_system/system_manage/serializers/password_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | 4 | class PasswordSerializer(serializers.Serializer): 5 | origin_password = serializers.CharField(required=False) 6 | password = serializers.CharField(min_length=6, max_length=18) 7 | password2 = serializers.CharField(min_length=6, max_length=18) # 确认密码 8 | 9 | class Meta: 10 | fields = ["password", 'password2'] 11 | 12 | def validate_origin_password(self, value): 13 | user = self.context["request"].user 14 | if user.is_superuser: 15 | # 如果是超级管理员,可以更改其他人的密码 16 | return value 17 | if not user.check_password(value): 18 | raise serializers.ValidationError("原密码不正确") 19 | return value 20 | 21 | def validate(self, attrs): 22 | password = attrs.get("password") 23 | password2 = attrs.get("password2") 24 | if password != password2: # 防止为空 25 | raise serializers.ValidationError("两次密码不一致") 26 | return attrs 27 | -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/staffstatus_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | from staff.models import Part, Team, Staff, Department 3 | 4 | 5 | # class TeamSerializer(serializers.ModelSerializer): 6 | # """班组序列化器""" 7 | # 8 | # class Meta: 9 | # model = Team 10 | # fields = ('name',) 11 | 12 | 13 | class StaffSerializer(serializers.ModelSerializer): 14 | """工区人员状态序列化器""" 15 | 16 | # job_station 17 | # group_number_id = serializers.CharField(label='班组id', allow_null=True) 18 | # job_station = serializers.SlugRelatedField(label='工作岗位', read_only=True, slug_field='name') 19 | department = serializers.SerializerMethodField() 20 | 21 | class Meta: 22 | model = Staff 23 | fields = ('id', 'name', 'phone', 'department', 'medical_history') 24 | 25 | def get_department(self, obj): 26 | department_id = obj.department_id 27 | department = Department.objects.get(id=department_id) 28 | return department.department + '/' + department.group_name 29 | 30 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import include, path 2 | from rest_framework import routers 3 | from .viewsets import group_permission_viewset, user_viewset, artificial_log_viewset, artificial_log_category_viewset 4 | 5 | urlpatterns = [] 6 | 7 | # 角色权限相关 8 | router = routers.DefaultRouter() 9 | router.register('group_permission', group_permission_viewset.GroupPermissionViewSet, base_name="group_permission") 10 | 11 | urlpatterns += router.urls 12 | 13 | # 用户相关 14 | router = routers.DefaultRouter() 15 | router.register('user_permission', user_viewset.UserPermissionViewSet, base_name="user_permission") 16 | 17 | urlpatterns += router.urls 18 | 19 | # 日志相关 20 | router = routers.DefaultRouter() 21 | router.register('artificial_log', artificial_log_viewset.ArtificialLogViewSet, base_name="artificial_log") 22 | 23 | urlpatterns += router.urls 24 | 25 | router = routers.DefaultRouter() 26 | router.register('artificial_log_category', artificial_log_category_viewset.ArtificialLogCategoryViewSet, base_name="artificial_log_category") 27 | 28 | urlpatterns += router.urls 29 | -------------------------------------------------------------------------------- /ruidun_system/lib/model_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import mixins, status 2 | from rest_framework.permissions import IsAuthenticated 3 | from rest_framework.response import Response 4 | from rest_framework.viewsets import GenericViewSet 5 | 6 | from lib.user_permission import SelfPermission 7 | 8 | 9 | class DestroyModelMixin(object): 10 | """ 11 | Destroy a model instance. 12 | """ 13 | def destroy(self, request, *args, **kwargs): 14 | instance = self.get_object() 15 | instance.is_used = 0 16 | instance.save() 17 | return Response(status=status.HTTP_204_NO_CONTENT) 18 | 19 | 20 | class ModelViewSet(mixins.CreateModelMixin, 21 | mixins.RetrieveModelMixin, 22 | mixins.UpdateModelMixin, 23 | DestroyModelMixin, 24 | mixins.ListModelMixin, 25 | GenericViewSet): 26 | """ 27 | A viewset that provides default `create()`, `retrieve()`, `update()`, 28 | `partial_update()`, `destroy()` and `list()` actions. 29 | """ 30 | # permission_classes = [SelfPermission, IsAuthenticated] 31 | permission_classes = [SelfPermission] -------------------------------------------------------------------------------- /ruidun_system/.idea/ruidun_system.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 26 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/models.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django.db import models 3 | 4 | from auth_system.models import User 5 | from db.base_model import SortBaseModel 6 | 7 | 8 | class ArtificialLogCategory(SortBaseModel): 9 | name = models.CharField(max_length=100, verbose_name="人工日子分类名字") 10 | 11 | class Meta: 12 | db_table = "tb_artificial_log_category" 13 | verbose_name = "人工日志分类" 14 | verbose_name_plural = verbose_name 15 | 16 | 17 | class ArtificialLog(models.Model): 18 | """人工日志类""" 19 | id = models.CharField(max_length=50, verbose_name="主键", primary_key=True) 20 | object = models.CharField(max_length=100, verbose_name="操作对象") 21 | user = models.CharField(verbose_name="作者", max_length=50) 22 | category = models.CharField(verbose_name="日志分类", max_length=50) 23 | time = models.DateTimeField(verbose_name="日志时间") 24 | # status = models.BooleanField(default=True, verbose_name="是否删除") 25 | # level = models.SmallIntegerField(verbose_name="日志等级") 26 | 27 | class Meta: 28 | db_table = "tb_artificial_log" 29 | verbose_name = "人工日志" 30 | verbose_name_plural = verbose_name 31 | 32 | -------------------------------------------------------------------------------- /ruidun_system/requirements.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | certifi==2018.8.24 3 | cffi==1.11.5 4 | chardet==3.0.4 5 | cryptography==2.3.1 6 | cycler==0.10.0 7 | defusedxml==0.5.0 8 | Django==2.1 9 | # django-adminlte==1.2 10 | # django-adminlte2==0.4.1 11 | # django-allauth==0.37.1 12 | # django-appconf==1.0.2 13 | # django-compressor==2.2 14 | # django-compressor-toolkit==0.6.0 15 | # django-crudbuilder==0.2.7 16 | # django-debug-toolbar==1.9.1 17 | django-extensions==2.1.2 18 | django-filter==2.0.0 19 | # django-tables2==1.21.2 20 | # django-widget-tweaks==1.4.2 21 | idna==2.7 22 | kiwisolver==1.0.1 23 | matplotlib==3.0.0rc2 24 | numpy==1.15.1 25 | oauthlib==2.1.0 26 | Pillow==5.2.0 27 | pycparser==2.18 28 | PyMySQL==0.9.2 29 | mysqlclient 30 | pyparsing==2.2.0 31 | python-dateutil==2.7.3 32 | python3-openid==3.1.0 33 | pytz==2018.5 34 | rcssmin==1.0.6 35 | requests==2.19.1 36 | requests-oauthlib==1.0.0 37 | rjsmin==1.0.12 38 | six==1.11.0 39 | split==0.4 40 | sqlparse==0.2.4 41 | suds-jurko==0.6 42 | urllib3==1.23 43 | djangorestframework 44 | # django-rest-auth 45 | djangorestframework-jwt 46 | django-cors-headers 47 | djangorestframework-jsonapi 48 | django-autofixture 49 | drf-tracking -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/carbreak_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from ..models import CarBreak 5 | 6 | 7 | class CarBreakSerializer(serializers.ModelSerializer): 8 | """车辆道闸序列化器""" 9 | 10 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 11 | part_id = serializers.CharField(allow_null=True) 12 | 13 | class Meta: 14 | model = CarBreak 15 | fields = '__all__' 16 | extra_kwargs = { 17 | 'id': {'required': False} 18 | } 19 | 20 | def create(self, validated_data): 21 | """新建""" 22 | pk = uuid.uuid4() 23 | return CarBreak.objects.create(pk=pk, **validated_data) 24 | 25 | def update(self, instance, validated_data): 26 | """更新,instance为要更新的对象实例""" 27 | instance.id = validated_data.get('id', instance.id) 28 | instance.part_id = validated_data.get('part_id', instance.part_id) 29 | instance.name = validated_data.get('name', instance.name) 30 | instance.x = validated_data.get('x', instance.x) 31 | instance.y = validated_data.get('y', instance.y) 32 | instance.save() 33 | return instance 34 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/staff_location_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework import viewsets 4 | from rest_framework.filters import OrderingFilter 5 | 6 | from internet_setting.models import StaffLocation 7 | from internet_setting.serializers.staff_location_serializer import StaffLocationSerializer 8 | 9 | 10 | class StaffLocationFilter(django_filters.FilterSet): 11 | time_gt = django_filters.DateTimeFilter(field_name="time", lookup_expr='gte') 12 | time_lt = django_filters.DateTimeFilter(field_name="time", lookup_expr='lte') 13 | part_id = django_filters.CharFilter(field_name="location_card_id", lookup_expr='staff__part_id') 14 | location_card_id = django_filters.CharFilter() 15 | 16 | class Meta: 17 | model = StaffLocation 18 | fields = ["time_gt", "time_lt", 'part_id'] 19 | 20 | 21 | class StaffLocationViewSet(viewsets.ReadOnlyModelViewSet): 22 | queryset = StaffLocation.objects.all() 23 | serializer_class = StaffLocationSerializer 24 | filterset_class = StaffLocationFilter 25 | filter_backends = [OrderingFilter, DjangoFilterBackend] 26 | ordering_fields = ("time",) 27 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/serializers/group_serializer.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.models import Group, Permission 2 | from rest_framework import serializers 3 | 4 | from auth_system.models import ExtraGroup 5 | 6 | 7 | class GroupSerializer(serializers.ModelSerializer): 8 | note = serializers.SerializerMethodField() 9 | permission_ids = serializers.ListField(write_only=True) 10 | 11 | class Meta: 12 | model = Group 13 | fields = ["id", 'name', 'note', 'permission_ids'] 14 | extra_kwargs = { 15 | "id": {"read_only": True}, 16 | "note": {"required": False}, 17 | "name": {"required": False}, 18 | "permission_ids": {"required": False} 19 | } 20 | 21 | def get_note(self, obj): 22 | return obj.extra_group.note 23 | 24 | def validate_permission_ids(self, value): 25 | # 校验权限ids 26 | # 取到数据库中拥有的权限id,比较传过来的id列表是否在里面,方法是转化为集合,判断一个是否小于另一个 27 | value = set(value) 28 | ori_permission_ids = set([p.pk for p in Permission.objects.all()]) 29 | if value <= ori_permission_ids: 30 | return value 31 | else: 32 | raise serializers.ValidationError("id列表中有不存在的权限id") 33 | -------------------------------------------------------------------------------- /ruidun_system/equipment/viewsets/equipmentrepair_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | import django_filters as filters 3 | from django_filters.rest_framework import DjangoFilterBackend 4 | from rest_framework.filters import OrderingFilter 5 | from ..models import EquipmentRepair 6 | from ..serializers.equipmentrepair_serializer import EquipmentRepairSerializer 7 | 8 | """维修记录搜索查询""" 9 | class EquipmentrepairFilter(filters.FilterSet): 10 | manager = filters.CharFilter(field_name="manager_id", lookup_expr="name") 11 | name = filters.CharFilter(field_name="equipment_id", lookup_expr="name") 12 | time_gt = filters.DateTimeFilter(field_name="time", lookup_expr='gte') 13 | time_lt = filters.DateTimeFilter(field_name="time", lookup_expr='lte') 14 | 15 | class Meta: 16 | model = EquipmentRepair 17 | fields = ["manager", 'equipment_id', "time_gt", "time_lt", "serviceman", "name"] 18 | 19 | class EquipmentRepairViewSet(ModelViewSet): 20 | 21 | queryset = EquipmentRepair.objects.all() 22 | serializer_class = EquipmentRepairSerializer 23 | filterset_class = EquipmentrepairFilter 24 | filter_backends = [OrderingFilter, DjangoFilterBackend] 25 | ordering_fields = ("time",) 26 | 27 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/location_card_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework import viewsets 5 | 6 | from internet_setting.models import LocationCard 7 | from internet_setting.serializers.location_card_serializer import LocationCardSerializer 8 | 9 | 10 | class LocationCardFilter(django_filters.FilterSet): 11 | '''可以根据时间区间, 发放状态来过滤''' 12 | 13 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 14 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 15 | 16 | # 还会补充其他字段,暂保留 17 | 18 | class Meta: 19 | model = LocationCard 20 | fields = ["time__gt", 'time__lt', 'status'] 21 | 22 | 23 | class LocationCardViewSet(viewsets.ReadOnlyModelViewSet): 24 | """ 25 | A simple ViewSet for viewing and editing accounts. 26 | """ 27 | queryset = LocationCard.objects.all() 28 | serializer_class = LocationCardSerializer 29 | # permission_classes = [SelfPermission] 30 | filterset_class = LocationCardFilter 31 | filter_backends = [OrderingFilter, DjangoFilterBackend] 32 | ordering_fields = ('time', 'status') 33 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/device_info_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from lib.model_viewset import ModelViewSet 5 | 6 | from internet_setting.models import DeviceInfo 7 | from internet_setting.serializers.device_info_serializer import DeviceInfoSerializer 8 | 9 | 10 | class DeviceInfoFilter(django_filters.FilterSet): 11 | '''可以根据时间区间, 是否损坏, 厂家id, 型号, 分类等来过滤''' 12 | 13 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 14 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 15 | 16 | class Meta: 17 | model = DeviceInfo 18 | fields = ["time__gt", 'time__lt', 'status', 'category_id', 'factory', 'model'] 19 | 20 | 21 | class DeviceInfoViewSet(ModelViewSet): 22 | """ 23 | A simple ViewSet for viewing and editing accounts. 24 | """ 25 | queryset = DeviceInfo.objects.all() 26 | serializer_class = DeviceInfoSerializer 27 | # permission_classes = [SelfPermission] 28 | filterset_class = DeviceInfoFilter 29 | filter_backends = [OrderingFilter, DjangoFilterBackend] 30 | ordering_fields = ('time', 'status', 'category_id') 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/ipswitch_detail_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from lib.model_viewset import ModelViewSet 5 | 6 | from internet_setting.models import IPSwitchDetail 7 | from internet_setting.serializers.ipswitch_detail_serializer import IPSwitchDetailSerializer 8 | 9 | 10 | # class VoiceFilter(django_filters.FilterSet): 11 | # '''可以根据时间区间, 是否损坏, 厂家, 型号等来过滤''' 12 | # 13 | # time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 14 | # time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 15 | # 16 | # class Meta: 17 | # model = Voice 18 | # fields = ["time__gt", 'time__lt', 'status', 'factory', 'model'] 19 | # 20 | 21 | class IPSwitchDetailViewSet(ModelViewSet): 22 | """ 23 | A simple ViewSet for viewing and editing accounts. 24 | """ 25 | queryset = IPSwitchDetail.objects.all() 26 | serializer_class = IPSwitchDetailSerializer 27 | # permission_classes = [SelfPermission] 28 | # filterset_class = VoiceFilter 29 | # filter_backends = [OrderingFilter, DjangoFilterBackend] 30 | # ordering_fields = ('time', 'status', 'category_id') 31 | 32 | 33 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/music_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import viewsets, status 2 | from rest_framework.filters import OrderingFilter 3 | from rest_framework.response import Response 4 | 5 | from internet_setting.models import Music 6 | from internet_setting.serializers.music_serializer import MusicSerializer 7 | from lib import model_viewset 8 | 9 | 10 | class MusicViewSet(model_viewset.ModelViewSet): 11 | """ 12 | A simple ViewSet for viewing and editing accounts. 13 | """ 14 | queryset = Music.objects.filter(is_used=1).all() 15 | serializer_class = MusicSerializer 16 | filter_backends = [OrderingFilter] 17 | # ordering_fields = ('index',) 18 | 19 | # permission_classes = [SelfPermission] 20 | # 21 | # def destroy(self, request, *args, **kwargs): 22 | # instance = self.get_object() 23 | # instance.is_used = 0 24 | # instance.save() 25 | # return Response(status=status.HTTP_204_NO_CONTENT) 26 | 27 | # def destroy(self, request, *args, **kwargs): 28 | # partial = kwargs.pop('partial', False) 29 | # instance = self.get_object() 30 | # serializer = self.get_serializer(instance, data=request.data, partial=partial) 31 | # serializer.is_valid(raise_exception=True) 32 | # instance.save() -------------------------------------------------------------------------------- /ruidun_system/equipment/serializers/equipmentlocation_seriallizer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from staff.models import Staff 4 | from ..models import EquipmentLocation, EquipmentUsed 5 | 6 | 7 | class EquipmentLocationSerializer(serializers.ModelSerializer): 8 | """工程车辆定位记录序列化器(暂时只有查询)""" 9 | # location_card_id = serializers.CharField(allow_null=True, required=False) 10 | equipment_name = serializers.SerializerMethodField() 11 | company_name = serializers.SerializerMethodField() 12 | model_name = serializers.SerializerMethodField() 13 | user_name = serializers.SerializerMethodField() 14 | 15 | class Meta: 16 | model = EquipmentLocation 17 | fields = "__all__" 18 | extra_kwargs = { 19 | "id": {"required": False} 20 | } 21 | 22 | def get_equipment_name(self, obj): 23 | return obj.location_card.equipment.name 24 | 25 | def get_company_name(self, obj): 26 | return obj.location_card.equipment.company.name 27 | 28 | def get_model_name(self, obj): 29 | return obj.location_card.equipment.model.name 30 | 31 | def get_user_name(self, obj): 32 | user_id = EquipmentUsed.objects.get(id=obj.location_card.equipment_id).user_id 33 | return Staff.objects.get(id=user_id).name 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/device_upkeep_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from lib.model_viewset import ModelViewSet 5 | 6 | from internet_setting.models import DeviceUpkeep 7 | from internet_setting.serializers.device_upkeep_serializer import DeviceUpkeepSerializer 8 | 9 | 10 | class DeviceUpkeepFilter(django_filters.FilterSet): 11 | '''可以根据时间区间,负责人, 维护人来过滤''' 12 | 13 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 14 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 15 | 16 | manager = django_filters.CharFilter(field_name='manager_id', lookup_expr='name') # 负责人 17 | 18 | class Meta: 19 | model = DeviceUpkeep 20 | fields = ["time__gt", 'time__lt', 'manager', 'upkeep_man'] 21 | 22 | 23 | class DeviceUpkeepViewSet(ModelViewSet): 24 | """ 25 | A simple ViewSet for viewing and editing accounts. 26 | """ 27 | queryset = DeviceUpkeep.objects.all() 28 | serializer_class = DeviceUpkeepSerializer 29 | # permission_classes = [SelfPermission] 30 | filterset_class = DeviceUpkeepFilter 31 | filter_backends = [OrderingFilter, DjangoFilterBackend] 32 | ordering_fields = ('time',) -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/open_carbreak_view.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.response import Response 3 | from rest_framework.views import APIView 4 | 5 | from work_area.models import CarBreak 6 | 7 | 8 | class OpenCarbreak(APIView): 9 | """开启车辆道闸""" 10 | 11 | def get(self, request): 12 | 13 | id = request.query_params.get('id') 14 | action = request.query_params.get('action') 15 | 16 | # 校验参数是否有值 17 | if not all([id, action]): 18 | return Response({'error':'参数不足'}, status=status.HTTP_400_BAD_REQUEST) 19 | 20 | if action not in ("True", "False"): 21 | return Response({'error': '参数错误'}, status=status.HTTP_400_BAD_REQUEST) 22 | 23 | # 查看道闸是否存在 24 | carbreak = None 25 | try: 26 | carbreak = CarBreak.objects.get(id=id) 27 | except Exception as e: 28 | # 写入logger日志 29 | pass 30 | if not carbreak: 31 | return Response({'error':'车辆道闸不存在'}, status=status.HTTP_400_BAD_REQUEST) 32 | 33 | # 调用硬件接口 34 | state, message = 接口(id, action) # TODO 改为车辆道闸接口 35 | 36 | data = { 37 | 'state': state, 38 | 'message': message 39 | } 40 | 41 | return Response(data, status=status.HTTP_200_OK) -------------------------------------------------------------------------------- /ruidun_system/safe/viewsets/method_viewset.py: -------------------------------------------------------------------------------- 1 | import os 2 | from time import time 3 | 4 | import django_filters 5 | from django_filters import rest_framework as filters 6 | from rest_framework.filters import OrderingFilter 7 | from rest_framework.response import Response 8 | from rest_framework import status 9 | from rest_framework.decorators import action 10 | 11 | from safe.serializers.method_serializer import MethodSerializer 12 | from ..models import SpecialScheme, Method 13 | from ..serializers.specialscheme_serializer import SpecialSchemeSerializer 14 | from base_system import settings 15 | from lib.model_viewset import ModelViewSet 16 | 17 | 18 | class MethodFilter(django_filters.FilterSet): 19 | """专项方案过滤器""" 20 | 21 | time_gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 22 | time_lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 23 | 24 | class Meta: 25 | model = Method 26 | fields = ['time_gt', 'time_lt', 'people'] 27 | 28 | 29 | class MethodViewset(ModelViewSet): 30 | """专项方案管理""" 31 | 32 | queryset = Method.objects.all() 33 | serializer_class = MethodSerializer 34 | filterset_class = MethodFilter 35 | filter_backends = (OrderingFilter, filters.DjangoFilterBackend,) 36 | ordering_fields = ('reate_time', 'update_time') 37 | 38 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/open_staffbreak_view.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.response import Response 3 | from rest_framework.views import APIView 4 | 5 | from work_area.models import StaffRecord 6 | 7 | 8 | class OpenStaffbreak(APIView): 9 | """开启人员道闸""" 10 | 11 | def get(self, request): 12 | 13 | id = request.query_params.get('id') 14 | action = request.query_params.get('action') 15 | 16 | # 校验参数是否有值 17 | if not all([id, action]): 18 | return Response({'error':'参数不足'}, status=status.HTTP_400_BAD_REQUEST) 19 | 20 | if action not in ("True", "False"): 21 | return Response({'error': '参数错误'}, status=status.HTTP_400_BAD_REQUEST) 22 | 23 | # 查看道闸是否存在 24 | staffbreak = None 25 | try: 26 | staffbreak = StaffRecord.objects.get(id=id) 27 | except Exception as e: 28 | # 写入logger日志 29 | pass 30 | if not staffbreak: 31 | return Response({'error':'人员道闸不存在'}, status=status.HTTP_400_BAD_REQUEST) 32 | 33 | # 调用硬件接口 34 | state, message = 接口(id, action) # TODO 改为人员道闸接口 35 | 36 | data = { 37 | 'state': state, 38 | 'message': message 39 | } 40 | 41 | return Response(data, status=status.HTTP_200_OK) -------------------------------------------------------------------------------- /ruidun_system/equipment/viewsets/equipmentuser_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters as filters 2 | from lib.model_viewset import ModelViewSet 3 | from django_filters.rest_framework import DjangoFilterBackend 4 | from rest_framework.filters import OrderingFilter 5 | from ..models import EquipmentUsed 6 | from ..serializers.equipmentused_serializer import EquipmentUsedSerializer 7 | 8 | """使用记录搜索查询""" 9 | class EquipmentuserFilter(filters.FilterSet): 10 | time_gt = filters.DateTimeFilter(field_name="start_time", lookup_expr='gte') 11 | time_lt = filters.DateTimeFilter(field_name="start_time", lookup_expr='lte') 12 | user_name = filters.CharFilter(field_name="user_id", lookup_expr='name') 13 | equipment_name = filters.CharFilter(field_name="equipment_id", lookup_expr="name") 14 | manager_name = filters.CharFilter(field_name="manager_id", lookup_expr="name") 15 | 16 | class Meta: 17 | model = EquipmentUsed 18 | fields = ["time_gt", "time_lt", 'user_name', "equipment_id", "manager_name", "equipment_name"] 19 | 20 | 21 | class EquipmentUsedViewSet(ModelViewSet): 22 | queryset = EquipmentUsed.objects.all() 23 | serializer_class = EquipmentUsedSerializer 24 | filterset_class = EquipmentuserFilter 25 | filter_backends = [OrderingFilter, DjangoFilterBackend] 26 | ordering_fields = ("start_time", "id") 27 | 28 | 29 | -------------------------------------------------------------------------------- /ruidun_system/huanjing.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | certifi==2018.8.24 3 | cffi==1.11.5 4 | chardet==3.0.4 5 | cryptography==2.3.1 6 | cycler==0.10.0 7 | defusedxml==0.5.0 8 | Django==2.1 9 | django-adminlte==1.2 10 | django-adminlte2==0.4.1 11 | django-allauth==0.37.1 12 | django-appconf==1.0.2 13 | django-autofixture==0.12.1 14 | django-compressor==2.2 15 | django-compressor-toolkit==0.6.0 16 | django-cors-headers==2.4.0 17 | django-crudbuilder==0.2.7 18 | django-debug-toolbar==1.9.1 19 | django-extensions==2.1.2 20 | django-filter==2.0.0 21 | django-tables2==1.21.2 22 | django-widget-tweaks==1.4.2 23 | djangorestframework==3.9.1 24 | djangorestframework-jsonapi==2.7.0 25 | djangorestframework-jwt==1.11.0 26 | drf-tracking==1.5.0 27 | et-xmlfile==1.0.1 28 | idna==2.7 29 | inflection==0.3.1 30 | jdcal==1.4 31 | kiwisolver==1.0.1 32 | matplotlib==3.0.0rc2 33 | mysqlclient==1.4.2 34 | numpy==1.15.1 35 | oauthlib==2.1.0 36 | openpyxl==2.6.1 37 | pandas==0.24.2 38 | Pillow==5.2.0 39 | pycparser==2.18 40 | PyJWT==1.7.1 41 | PyMySQL==0.9.2 42 | pyparsing==2.2.0 43 | python-dateutil==2.7.3 44 | python3-openid==3.1.0 45 | pytz==2018.5 46 | rcssmin==1.0.6 47 | requests==2.19.1 48 | requests-oauthlib==1.0.0 49 | rjsmin==1.0.12 50 | six==1.11.0 51 | split==0.4 52 | sqlparse==0.2.4 53 | suds-jurko==0.6 54 | urllib3==1.23 55 | Werkzeug==0.14.1 56 | xlrd==1.2.0 57 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/serializers/artificial_log_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import User 6 | from system_manage.models import ArtificialLog, ArtificialLogCategory 7 | 8 | 9 | class ArtificialLogSerializer(serializers.ModelSerializer): 10 | # user = serializers.SlugRelatedField(slug_field="username", read_only=True) 11 | # user_id = serializers.CharField(read_only=True) 12 | # category = serializers.SlugRelatedField(slug_field="name", read_only=True) 13 | # category_id = serializers.CharField() 14 | 15 | class Meta: 16 | model = ArtificialLog 17 | fields = "__all__" 18 | # exclude = ["status", 'level'] 19 | extra_kwargs = { 20 | "id": {"read_only": True}, 21 | } 22 | # 23 | # def validate_category_id(self, value): 24 | # if ArtificialLogCategory.objects.filter(pk=value).count() == 0: 25 | # raise serializers.ValidationError("无效的分类id") 26 | # return value 27 | # 28 | # def create(self, validated_data): 29 | # user = self.context["request"].user 30 | # # 日志的用户id和等级都由系统自己生成 31 | # validated_data["level"] = user.log_level 32 | # validated_data["user"] = user.pk 33 | # return ArtificialLog.objects.create(pk=uuid.uuid4(), **validated_data) -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/device_category_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import viewsets, status 2 | from rest_framework.filters import OrderingFilter 3 | from rest_framework.response import Response 4 | 5 | from internet_setting.models import DeviceCategory 6 | from internet_setting.serializers.device_category_serializer import DeviceCategorySerializer 7 | from lib import model_viewset 8 | 9 | 10 | class DeviceCategoryViewSet(model_viewset.ModelViewSet): 11 | """ 12 | A simple ViewSet for viewing and editing accounts. 13 | """ 14 | queryset = DeviceCategory.objects.filter(is_used=1).all() 15 | serializer_class = DeviceCategorySerializer 16 | filter_backends = [OrderingFilter] 17 | ordering_fields = ('index',) 18 | 19 | # permission_classes = [SelfPermission] 20 | # 21 | # def destroy(self, request, *args, **kwargs): 22 | # instance = self.get_object() 23 | # instance.is_used = 0 24 | # instance.save() 25 | # return Response(status=status.HTTP_204_NO_CONTENT) 26 | 27 | # def destroy(self, request, *args, **kwargs): 28 | # partial = kwargs.pop('partial', False) 29 | # instance = self.get_object() 30 | # serializer = self.get_serializer(instance, data=request.data, partial=partial) 31 | # serializer.is_valid(raise_exception=True) 32 | # instance.save() -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/carrecord_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from internet_setting.models import CarPass 4 | from ..models import CarRecord, CarInfo, CarBreak 5 | 6 | 7 | class CarInfoSerializer(serializers.ModelSerializer): 8 | """车辆信息序列化器""" 9 | 10 | code = serializers.SerializerMethodField() 11 | 12 | class Meta: 13 | model = CarInfo 14 | fields = ('code', 'id', 'car_owner', 'phone_number') 15 | 16 | def get_code(self, obj): 17 | request = self.context['request'] 18 | part_id = request.query_params.get('part_id') 19 | # TODO 等待传入part_id 20 | carpass_set = obj.carpass_set.filter(part_id=1) 21 | # return map(lambda p: {"code": p.code}, staffpass_set) 22 | 23 | if not carpass_set: 24 | return None 25 | 26 | return (carpass_set[0].code) 27 | 28 | 29 | class CarRecordSerializer(serializers.ModelSerializer): 30 | """车辆通行记录序列化器""" 31 | 32 | # car = CarInfoSerializer(read_only=True) 33 | # car_break = serializers.SlugRelatedField(label='道闸', read_only=True, slug_field='name') 34 | 35 | class Meta: 36 | model = CarRecord 37 | # fields = ('id', 'car', 'car_break', 'in_out', 'time') 38 | fields = ('id', 'cardid', 'cardnumber', 'intime', 'inplace', 'outtime', 'outplace') 39 | 40 | 41 | -------------------------------------------------------------------------------- /ruidun_system/auth_system/views.py: -------------------------------------------------------------------------------- 1 | # from django.contrib.auth.models import Group 2 | # from django.shortcuts import render 3 | # 4 | # # Create your views here. 5 | # from rest_framework import viewsets, status 6 | # from rest_framework.generics import GenericAPIView 7 | # from rest_framework.response import Response 8 | # 9 | # from .models import User, Part 10 | # 11 | # 12 | # class DeforChangeViewset(GenericAPIView): 13 | # """修改默认组和工区""" 14 | # 15 | # def post(self, request): 16 | # user_id = request.data.get('user_id') 17 | # group_id = request.data.get('group_id') 18 | # part_id = request.data.get('part_id') 19 | # 20 | # try: 21 | # user = User.objects.get(id=user_id) 22 | # except Exception as e: 23 | # return Response({'error': '用户不存在'}, status=status.HTTP_400_BAD_REQUEST) 24 | # 25 | # if Part.objects.filter(id=part_id).count(): 26 | # user.default_part_id = part_id 27 | # 28 | # if Group.objects.filter(id=group_id).count(): 29 | # user.default_group_id = group_id 30 | # 31 | # user.save() 32 | # 33 | # user_dict = dict() 34 | # user_dict['default_group_id'] = user.default_group_id 35 | # user_dict['default_part_id'] = user.default_part_id 36 | # 37 | # return Response(user_dict, status=status.HTTP_400_BAD_REQUEST) 38 | # 39 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/staff_pass_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from internet_setting.models import StaffPass 6 | from staff.models import Staff 7 | 8 | 9 | class StaffPassSerializer(serializers.ModelSerializer): 10 | 11 | staff = serializers.SlugRelatedField(slug_field='name', read_only=True) 12 | staff_id = serializers.CharField(allow_null=True, required=False) 13 | 14 | class Meta: 15 | model = StaffPass 16 | fields = '__all__' 17 | extra_kwargs = { 18 | "id": {"read_only": True} 19 | } 20 | 21 | def validate_staff_id(self, value): 22 | if Staff.objects.filter(pk=value).count() == 0: 23 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 24 | return value 25 | 26 | def create(self, validated_data): 27 | pk = uuid.uuid4() 28 | return StaffPass.objects.create(pk=pk, **validated_data) 29 | 30 | def update(self, instance, validated_data): 31 | instance.status = validated_data.get("status", instance.status) 32 | instance.staff_id = validated_data.get("staff_id", instance.staff_id) 33 | instance.is_used = validated_data.get("is_used", instance.is_used) 34 | instance.code = validated_data.get("code", instance.code) 35 | 36 | instance.save() 37 | return instance -------------------------------------------------------------------------------- /ruidun_system/work_area/fixtures/staff_record.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "model": "work_area.staffbreak", 4 | "pk": "1", 5 | "fields": { 6 | "create_time": "2019-03-12T00:00:00Z", 7 | "update_time": "2019-03-13T00:00:00Z", 8 | "index": 1, 9 | "is_used": 1, 10 | "name": "\u4eba\u5458\u897f\u4e00\u9053\u95f8" 11 | } 12 | }, 13 | { 14 | "model": "work_area.staffbreak", 15 | "pk": "2", 16 | "fields": { 17 | "create_time": "2019-03-11T00:00:00Z", 18 | "update_time": "2019-03-12T00:00:00Z", 19 | "index": 2, 20 | "is_used": 1, 21 | "name": "\u4eba\u5458\u4e1c\u4e00\u9053\u95f8" 22 | } 23 | }, 24 | { 25 | "model": "work_area.staffrecord", 26 | "pk": "1", 27 | "fields": { 28 | "staff": "1", 29 | "staff_break": "1", 30 | "in_out": true, 31 | "time": "2019-03-13T00:00:00Z" 32 | } 33 | }, 34 | { 35 | "model": "work_area.staffrecord", 36 | "pk": "2", 37 | "fields": { 38 | "staff": "2", 39 | "staff_break": "2", 40 | "in_out": true, 41 | "time": "2019-03-12T00:00:00Z" 42 | } 43 | }, 44 | { 45 | "model": "work_area.staffrecord", 46 | "pk": "3", 47 | "fields": { 48 | "staff": "1", 49 | "staff_break": "2", 50 | "in_out": false, 51 | "time": "2019-03-13T10:00:00Z" 52 | } 53 | } 54 | ] -------------------------------------------------------------------------------- /ruidun_system/internet_operate/viewsets/speaker_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.decorators import action 3 | from rest_framework.response import Response 4 | from rest_framework.viewsets import ViewSet, ModelViewSet 5 | 6 | from internet_setting.models import Voice 7 | from client.ipvoice import Client 8 | 9 | 10 | class SpeakerViewSet(ModelViewSet): 11 | "音箱相关接口" 12 | 13 | # @action(methods=['POST'], detail=False) 14 | # def control(self, request): 15 | # "控制音箱开关的接口" 16 | # part_id = request.data.get('part_id') 17 | # ids = request.data.get('ids', []) 18 | # act = request.data.get('action') 19 | # if not all([part_id, ids, act]): 20 | # return Response(data={'message': "参数不足"}, status=status.HTTP_400_BAD_REQUEST) 21 | # # 校验操作方式和操作ids是否符合规则 22 | # if act not in ["open", "down"]: 23 | # return Response(data={'message': "操作方式错误"}, status=status.HTTP_400_BAD_REQUEST) 24 | # if DeviceInfo.objects.filter(id__in=ids).count() != len(ids): 25 | # return Response(data={'message': "操作音箱id错误,部分id不存在"}, status=status.HTTP_400_BAD_REQUEST) 26 | # 27 | # # 调用硬件接口: 28 | # result, message = 开启音箱接口(part_id=part_id, ids=ids, act=act) 29 | # return Response(data={"reslut": result, "message":message}, status=status.HTTP_200_OK) 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /ruidun_system/equipment/urls.py: -------------------------------------------------------------------------------- 1 | urlpatterns = [ 2 | 3 | ] 4 | 5 | #车辆信息 6 | from rest_framework import routers 7 | from .viewsets.equipmentinfo_viewset import EquipmentInfoViewSet 8 | router = routers.DefaultRouter() 9 | router.register('equipmentinfos', EquipmentInfoViewSet, base_name='equipment') 10 | 11 | urlpatterns += router.urls 12 | 13 | # 使用信息 14 | from .viewsets.equipmentuser_viewset import EquipmentUsedViewSet 15 | router = routers.DefaultRouter() 16 | router.register('equipmentuseds', EquipmentUsedViewSet, base_name='equipmentused') 17 | 18 | urlpatterns += router.urls 19 | 20 | 21 | # 保养信息 22 | from .viewsets.equipmentupkeep_viewset import EquipmentUpkeepViewSet 23 | router = routers.DefaultRouter() 24 | router.register('equipmentupkeeps', EquipmentUpkeepViewSet, base_name='equipmentupkeep') 25 | 26 | urlpatterns += router.urls 27 | 28 | 29 | # 修理信息 30 | from .viewsets.equipmentrepair_viewset import EquipmentRepairViewSet 31 | router = routers.DefaultRouter() 32 | router.register('equipmentrepairs', EquipmentRepairViewSet, base_name='equipmentrepair') 33 | 34 | urlpatterns += router.urls 35 | 36 | 37 | # 定位信息 38 | from .viewsets.equipmentlocation_viewset import EquipmentLocationViewSet 39 | router = routers.DefaultRouter() 40 | router.register('equipmentlocations', EquipmentLocationViewSet, base_name='equipmentlocation') 41 | 42 | urlpatterns += router.urls 43 | 44 | 45 | -------------------------------------------------------------------------------- /ruidun_system/auth_system/user_serializer.py: -------------------------------------------------------------------------------- 1 | # from django.contrib.auth.models import User 2 | from rest_framework import routers, serializers, viewsets 3 | 4 | from auth_system.models import User 5 | from .serializers import GroupSerializer 6 | 7 | 8 | class UserSerializer(serializers.ModelSerializer): 9 | groups = GroupSerializer(many=True, read_only=True) 10 | # groups = serializers.SerializerMethodField() 11 | parts = serializers.SerializerMethodField() 12 | # parts = PartSerializer(many=True, read_only=True) 13 | 14 | class Meta: 15 | model = User 16 | fields = ('username', 'id', 'email', 'is_active','first_name','last_name','groups', 'parts', 'default_part_id', 'default_group_id') 17 | 18 | # def get_groups(self, obj): 19 | # return GroupSerializer(instance=obj.groups.all(), many=True, read_only=True, context={"user": obj}).data 20 | 21 | def get_parts(self, obj): 22 | #TODO 后期修改为项目在外层 23 | parts = obj.parts.all() 24 | # projects = map(lambda p: p.project, parts) # 根据工区得到项目 25 | # projects = list(set(projects)) # 得到去重的列表 26 | return map(lambda p: {"id":p.id, "name": p.name, "project": {"project_id": p.project.id, "name": p.project.name}}, parts) 27 | # return map(lambda pj: {"id": pj.id, "name": pj.name, "parts": map(lambda p: {"id": p.id, "name": p.name, },set(pj.parts.all()) & set(parts))}, projects) 28 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/voice_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.decorators import action 4 | from rest_framework.filters import OrderingFilter 5 | from rest_framework import status 6 | from lib.model_viewset import ModelViewSet 7 | from rest_framework.response import Response 8 | 9 | from client.ipvoice import Client 10 | from internet_setting.models import Voice 11 | from internet_setting.serializers.voice_serializer import VoiceSerializer 12 | 13 | 14 | class VoiceFilter(django_filters.FilterSet): 15 | '''可以根据时间区间, 是否损坏, 厂家, 型号等来过滤''' 16 | 17 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 18 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 19 | 20 | class Meta: 21 | model = Voice 22 | fields = ["time__gt", 'time__lt', 'status', 'factory', 'model'] 23 | 24 | 25 | class VoiceViewSet(ModelViewSet): 26 | """ 27 | A simple ViewSet for viewing and editing accounts. 28 | """ 29 | queryset = Voice.objects.all() 30 | serializer_class = VoiceSerializer 31 | # permission_classes = [SelfPermission] 32 | filterset_class = VoiceFilter 33 | filter_backends = [OrderingFilter, DjangoFilterBackend] 34 | ordering_fields = ('time', 'status', 'category_id') 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/car_pass_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework import viewsets 5 | 6 | from internet_setting.models import CarPass 7 | from internet_setting.serializers.car_pass_serializer import CarPassSerializer 8 | from work_area.models import CarInfo 9 | 10 | 11 | 12 | class CarPassFilter(django_filters.FilterSet): 13 | '''可以根据时间区间,车主姓名, 车牌号来过滤''' 14 | 15 | # time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 16 | # time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 17 | # 18 | # name = django_filters.CharFilter(field_name='car_id', lookup_expr='car_owner') # 车主姓名 19 | 20 | class Meta: 21 | # model = CarPass 22 | # fields = ["time__gt", 'time__lt', 'car_id', 'name'] 23 | model = CarInfo 24 | fields = ['cphm', 'clxh'] 25 | 26 | 27 | class CarPassViewSet(viewsets.ReadOnlyModelViewSet): 28 | """ 29 | A simple ViewSet for viewing and editing accounts. 30 | """ 31 | queryset = CarInfo.objects.all() 32 | serializer_class = CarPassSerializer 33 | # permission_classes = [SelfPermission] 34 | filterset_class = CarPassFilter 35 | filter_backends = [OrderingFilter, DjangoFilterBackend] 36 | ordering_fields = ('cphm',) -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/dangername_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from safe.models import Danger 5 | 6 | 7 | class DangerNameSerializer(serializers.ModelSerializer): 8 | """危险品名字序列化器(搜索字段)""" 9 | part_id = serializers.CharField(allow_null=True, required=False) 10 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 11 | category_id = serializers.CharField(allow_null=True, required=False) 12 | category = serializers.SlugRelatedField(slug_field='name', read_only=True) 13 | class Meta: 14 | model = Danger 15 | fields = '__all__' 16 | #('id', 'name') 17 | extra_kwargs = { 18 | 'id': {'read_only': True}, 19 | } 20 | 21 | def create(self, validated_data): 22 | """新建""" 23 | pk = uuid.uuid4() 24 | # print(validated_data) 25 | return Danger.objects.create(pk=pk, **validated_data) 26 | 27 | def update(self, instance, validated_data): 28 | """更新,instance为要更新的对象实例""" 29 | instance.category_id = validated_data.get('category_id', instance.category_id) 30 | instance.part_id = validated_data.get('part_id', instance.part_id) 31 | instance.count = validated_data.get('count', instance.count) 32 | instance.name = validated_data.get('name', instance.name) 33 | instance.save() 34 | return instance -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/folk_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from staff.models import Folk, Staff 6 | 7 | 8 | class FolkSerializer(serializers.ModelSerializer): 9 | staff = serializers.SlugRelatedField(read_only=True, slug_field="name") 10 | staff_id = serializers.CharField(allow_null=True, required=False) 11 | 12 | class Meta: 13 | model = Folk 14 | fields = '__all__' 15 | extra_kwargs = { 16 | "id": {"required": False}, 17 | "name": {"required": False} 18 | } 19 | 20 | # 验证 21 | def validate_staff_id(self, value): 22 | if Staff.objects.filter(pk=value).count() == 0: 23 | raise serializers.ValidationError("无效的值") 24 | return value 25 | 26 | def create(self, validated_data): 27 | """新建""" 28 | validated_data['id'] = uuid.uuid4() 29 | return Folk.objects.create(**validated_data) 30 | 31 | def update(self, instance, validated_data): 32 | """更新,instance为要更新的对象实例""" 33 | instance.name = validated_data.get('name', instance.name) 34 | instance.phone = validated_data.get('phone', instance.phone) 35 | instance.address = validated_data.get('address', instance.address) 36 | instance.staff_id = validated_data.get('staff_id', instance.staff_id) 37 | instance.save() 38 | return instance -------------------------------------------------------------------------------- /ruidun_system/client/ipvoice.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from common.cfg import Config 3 | from common.myfuncs import Funcs 4 | from common.myproxy import Proxy 5 | 6 | ''' 7 | ipvoice语音客户端接口 8 | ''' 9 | class Client: 10 | device='ipvoice' #设备类型 11 | token='...' #暂略 12 | 13 | ip="192.168.0.112" 14 | port=6002 15 | voiceFilePath="D:/tts2.mp3" #完整路径 16 | snlist="e9682bb1b27ba83368d3932d0d2bd241" # 终端序列号列表,多个设备采用逗号分隔,如:"e9682bb1b27ba83368d3932d0d2bd241,e9682bb1b27ba83368d3932d0d2bd241" 17 | 18 | def __init__(self,ip,port,voiceFilePath,snlist): 19 | self.cfg = Config() 20 | self.url = self.cfg.get('main', 'url') + "/device" 21 | 22 | self.ip=ip 23 | self.port=port 24 | self.voiceFilePath=voiceFilePath 25 | self.snlist=snlist 26 | 27 | pass 28 | 29 | def send(self): 30 | #参数示例 31 | data={} 32 | data["token"]=self.token 33 | data["device"]=self.device 34 | 35 | data["ip"]=self.ip 36 | data["port"]=Funcs.toInt(self.port) 37 | 38 | data["voiceFilePath"]=self.voiceFilePath 39 | data["snlist"]=self.snlist 40 | 41 | result=Proxy.send(self.url,data) 42 | return result #异常返回值为'',正确返回值为1 43 | 44 | if __name__ == '__main__': 45 | obj=Client("192.168.0.112",6002,"D:/tts2.mp3","e9682bb1b27ba83368d3932d0d2bd241") 46 | result=obj.send() 47 | print(result) 48 | -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/company_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | import uuid 4 | 5 | from auth_system.models import Company 6 | 7 | 8 | class CompanySerializer(serializers.ModelSerializer): 9 | class Meta: 10 | model = Company 11 | fields = '__all__' 12 | extra_kwargs = { 13 | "id": {"read_only":True}, 14 | "boss_name": {"required": False}, 15 | "phone_num": {"required": False}, 16 | "name": {"required": False}, 17 | "company_address": {"required": False} 18 | } 19 | 20 | def create(self, validated_data): 21 | """新建""" 22 | validated_data['id'] = uuid.uuid4() 23 | return Company.objects.create(**validated_data) 24 | 25 | def update(self, instance, validated_data): 26 | """更新,instance为要更新的对象实例""" 27 | 28 | instance.name = validated_data.get('name', instance.name) 29 | instance.index = validated_data.get('index', instance.index) 30 | instance.is_used = validated_data.get('is_used', instance.is_used) 31 | instance.boss_name = validated_data.get('boss_name', instance.boss_name) 32 | instance.phone_num = validated_data.get('phone_num', instance.phone_num) 33 | instance.company_address = validated_data.get('company_address', instance.company_address) 34 | instance.save() 35 | return instance 36 | 37 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/caution_record_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework import viewsets 5 | 6 | from internet_setting.models import CautionRecord 7 | from internet_setting.serializers.caution_record_serializer import CautionRecordSerializer 8 | 9 | 10 | class CautionRecordFilter(django_filters.FilterSet): 11 | '''可以根据时间区间,报警设备分类id, 处置人姓名来过滤''' 12 | 13 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 14 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 15 | 16 | name = django_filters.CharFilter(field_name='disposer_id', lookup_expr='name') 17 | category_id = django_filters.CharFilter(field_name='device_id', lookup_expr='category_id') 18 | 19 | class Meta: 20 | model = CautionRecord 21 | fields = ["time__gt", 'time__lt', 'category_id', 'name', 'status'] 22 | 23 | 24 | class CautionRecordViewSet(viewsets.ReadOnlyModelViewSet): 25 | """ 26 | A simple ViewSet for viewing and editing accounts. 27 | """ 28 | queryset = CautionRecord.objects.all() 29 | serializer_class = CautionRecordSerializer 30 | # permission_classes = [SelfPermission] 31 | filterset_class = CautionRecordFilter 32 | filter_backends = [OrderingFilter, DjangoFilterBackend] 33 | ordering_fields = ('id', 'time') -------------------------------------------------------------------------------- /ruidun_system/db/base_model.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from rest_framework.exceptions import ValidationError 3 | 4 | 5 | class TimeBaseModel(models.Model): 6 | """模型抽象基类""" 7 | 8 | create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') 9 | update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') 10 | # is_delete = models.BooleanField(default=False, verbose_name='删除标记') 11 | 12 | class Meta: 13 | # 说明是一个抽象模型类 14 | abstract = True 15 | 16 | 17 | class SortBaseModel(models.Model): 18 | """模型抽象基类""" 19 | 20 | index = models.IntegerField(verbose_name='排序', default=0, null=True) 21 | is_used = models.IntegerField(verbose_name='是否启用', default=True, null=True) 22 | # is_delete = models.BooleanField(default=False, verbose_name='删除标记') 23 | 24 | class Meta: 25 | # 说明是一个抽象模型类 26 | abstract = True 27 | 28 | 29 | # 自定义捕获异常 30 | from rest_framework.views import exception_handler 31 | 32 | 33 | def custom_exception_handler(exc, context): 34 | # 先调用REST framework默认的异常处理方法获得标准错误响应对象 35 | response = exception_handler(exc, context) 36 | 37 | if response: 38 | s = response.data 39 | s['errno'] = s.pop(list(s)[0]) 40 | # 在此处补充自定义的异常处理 41 | # if response is not None: 42 | # view = context['view'] 43 | # if isinstance(exc, ValidationError): 44 | # response.data['errno'] = exc 45 | 46 | return response 47 | -------------------------------------------------------------------------------- /ruidun_system/equipment/viewsets/equipmentlocation_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework.permissions import IsAuthenticated 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | import django_filters as filters 5 | 6 | from client.location import Client 7 | from lib.model_viewset import ModelViewSet 8 | from lib.user_permission import SelfPermission 9 | from ..models import EquipmentLocation 10 | from ..serializers.equipmentlocation_seriallizer import EquipmentLocationSerializer 11 | 12 | # 查询设备的轨迹 13 | class EquipmentLocationFilter(filters.FilterSet): 14 | time_gt = filters.DateTimeFilter(field_name="time", lookup_expr='gte') 15 | time_lt = filters.DateTimeFilter(field_name="time", lookup_expr='lte') 16 | equipment_name = filters.CharFilter(field_name="location_card_id", lookup_expr='equipment__name') 17 | user_name = filters.CharFilter(field_name="location_card_id", lookup_expr='equipment__equipmentused__user__name') 18 | 19 | class Meta: 20 | model = EquipmentLocation 21 | fields = ["time_gt", "time_lt", "location_card_id", "location", "user_name", "equipment_name"] 22 | 23 | 24 | class EquipmentLocationViewSet(ModelViewSet): 25 | queryset = EquipmentLocation.objects.all() 26 | serializer_class = EquipmentLocationSerializer 27 | filterset_class = EquipmentLocationFilter 28 | filter_backends = [OrderingFilter, DjangoFilterBackend] 29 | ordering_fields = ("time", "id") 30 | 31 | 32 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/department_viewset.py: -------------------------------------------------------------------------------- 1 | # from lib.model_viewset import ModelViewSet 2 | # 3 | # from ..models import Department 4 | # from ..serializers.department_serializer import DepartmentSerializer 5 | # 6 | # 7 | # class DepartmentViewset(ModelViewSet): 8 | # """部门信息""" 9 | # queryset = Department.objects.filter(is_used=1).all() 10 | # serializer_class = DepartmentSerializer 11 | from rest_framework.response import Response 12 | from rest_framework import status 13 | 14 | from lib.model_viewset import ModelViewSet 15 | import django_filters as filters 16 | from django_filters.rest_framework import DjangoFilterBackend 17 | from rest_framework.filters import OrderingFilter 18 | from ..models import Department 19 | from ..serializers.department_serializer import DepartmentSerializer 20 | 21 | 22 | class DepartmentFilter(filters.FilterSet): 23 | class Meta: 24 | model = Department 25 | fields = ["department", "part_id"] 26 | 27 | 28 | class DepartmentViewset(ModelViewSet): 29 | """部门信息""" 30 | queryset = Department.objects.filter(is_used=1) 31 | serializer_class = DepartmentSerializer 32 | filterset_class = DepartmentFilter 33 | filter_backends = [OrderingFilter, DjangoFilterBackend] 34 | 35 | def destroy(self, request, *args, **kwargs): 36 | instance = self.get_object() 37 | instance.is_used = 0 38 | instance.status = 2 39 | instance.save() 40 | return Response(status=status.HTTP_204_NO_CONTENT) 41 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/viewsets/artificial_log_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework import viewsets 5 | from django.db.models import Q 6 | 7 | from lib.model_viewset import DestroyModelMixin 8 | from system_manage.models import ArtificialLog 9 | from system_manage.serializers.artificial_log_serializer import ArtificialLogSerializer 10 | 11 | 12 | class ArtificialLogFilter(django_filters.FilterSet): 13 | '''可以根据作者名, 时间''' 14 | 15 | time_gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 16 | time_lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 17 | 18 | # name = django_filters.CharFilter(field_name='user_id', lookup_expr='username') 19 | 20 | class Meta: 21 | model = ArtificialLog 22 | fields = ["time_gt", 'time_lt', 'time', 'user'] 23 | 24 | 25 | class ArtificialLogViewSet(viewsets.ReadOnlyModelViewSet): 26 | """人工日志类视图""" 27 | 28 | queryset = ArtificialLog.objects.all().order_by('-time') 29 | serializer_class = ArtificialLogSerializer 30 | filterset_class = ArtificialLogFilter 31 | filter_backends = [OrderingFilter, DjangoFilterBackend] 32 | ordering_fields = ["time", "category_id"] 33 | 34 | # def get_queryset(self): 35 | # query = ArtificialLog.objects.filter(Q(level__lt=self.request.user.log_level) | Q(user=self.request.user)) 36 | # return query -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/voice_server_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import Part 6 | from internet_setting.models import VoiceServer 7 | 8 | 9 | class VoiceServerSerializer(serializers.ModelSerializer): 10 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 11 | part_id = serializers.CharField(allow_null=True, required=False) 12 | 13 | class Meta: 14 | model = VoiceServer 15 | fields = '__all__' 16 | extra_kwargs = { 17 | "id": {"read_only": True}, 18 | } 19 | 20 | def validate_part_id(self, value): 21 | if Part.objects.filter(pk=value).count() == 0: 22 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 23 | return value 24 | 25 | def create(self, validated_data): 26 | pk = uuid.uuid4() 27 | return VoiceServer.objects.create(pk=pk, **validated_data) 28 | 29 | def update(self, instance, validated_data): 30 | instance.name = validated_data.get("name", instance.name) 31 | instance.ip = validated_data.get("ip", instance.ip) 32 | instance.part_id = validated_data.get("part_id", instance.part_id) 33 | instance.port = validated_data.get("port", instance.port) 34 | instance.note = validated_data.get("note", instance.note) 35 | # instance.is_used = validated_data.get("is_used", instance.is_used) 36 | 37 | instance.save() 38 | return instance 39 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/check_staff_name.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse, JsonResponse 2 | 3 | from staff.models import Staff 4 | from staff.serializers.staff_serializer import StaffSerializer 5 | from rest_framework.response import Response 6 | 7 | 8 | def check_staff_name(request): 9 | # 检查人员是否存在 10 | if request.method == "GET": 11 | staff_name = request.GET.get('staff_name', None) 12 | if not staff_name: 13 | return JsonResponse(data={"detail": "请求参数错误"}, status=400) 14 | 15 | staffs = Staff.objects.filter(name=staff_name) 16 | count = staffs.count() 17 | data = {"count": count} 18 | # 如果没有找到 19 | if not count: 20 | data["message"] = "这个名字不存在" 21 | elif count == 1: 22 | data["message"] = "不存在重名现象" 23 | data["id"] = staffs.first().pk 24 | else: 25 | # 存在重名现象 26 | data["message"] = '存在重名现象' 27 | serializer = StaffSerializer(staffs.all(), many=True) 28 | data["staffs"] = serializer.data 29 | for s in data["staffs"]: 30 | del s["folks"] 31 | # print(data["staffs"]) 32 | return JsonResponse(data=data, status=200) 33 | else: 34 | return JsonResponse(data={"detail": "请求方式错误"}, status=405) 35 | 36 | # if len(staffs) == 1: 37 | # return HttpResponse(staff_names[0].id) 38 | # 39 | # elif len(staff_names) > 1: 40 | # for name in staff_names: 41 | # id_list.append(name.id) 42 | # return HttpResponse(id_list) -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/led_programme_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from ..models import LedProgramme 6 | 7 | 8 | class LedProgrammeSerializer(serializers.ModelSerializer): 9 | 10 | class Meta: 11 | model = LedProgramme 12 | fields = '__all__' 13 | extra_kwargs = { 14 | "id": {"required": False}, 15 | } 16 | 17 | def create(self, validated_data): 18 | """新建""" 19 | validated_data['id'] = uuid.uuid4() 20 | return LedProgramme.objects.create(**validated_data) 21 | 22 | def update(self, instance, validated_data): 23 | """更新,instance为要更新的对象实例""" 24 | instance.name = validated_data.get('name', instance.name) 25 | instance.w_x = validated_data.get('w_x', instance.w_x) 26 | instance.h_y = validated_data.get('h_y', instance.h_y) 27 | instance.font_name = validated_data.get('font_name', instance.font_name) 28 | instance.font_size = validated_data.get('font_size', instance.font_size) 29 | instance.font_bold = validated_data.get('font_bold', instance.font_bold) 30 | instance.x_align = validated_data.get('x_align', instance.x_align) 31 | instance.y_align = validated_data.get('y_align', instance.y_align) 32 | instance.font_stunt = validated_data.get('font_stunt', instance.font_stunt) 33 | instance.font_showtime = validated_data.get('font_showtime', instance.font_showtime) 34 | instance.font_run = validated_data.get('font_run', instance.font_run) 35 | instance.save() 36 | return instance 37 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/deviceinfo_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from rest_framework.response import Response 3 | 4 | from internet_setting.models import DeviceInfo 5 | from internet_setting.serializers.device_info_serializer import DeviceInfoSerializer 6 | from lib.model_viewset import ModelViewSet 7 | 8 | 9 | class DeviceInfoFilter(django_filters.FilterSet): 10 | # 工区设备信息过滤器 11 | staff = django_filters.CharFilter(field_name='staff_id', lookup_expr='name') 12 | company = django_filters.CharFilter(field_name='part_id', lookup_expr='company_id__name') 13 | 14 | 15 | class Meta: 16 | model = DeviceInfo 17 | fields = ['category', 'name', 'factory', 'model', 'staff'] 18 | 19 | 20 | class DeviceInfoViewset(ModelViewSet): 21 | """工区设备信息""" 22 | 23 | queryset = DeviceInfo.objects.all() 24 | serializer_class = DeviceInfoSerializer 25 | filterset_class = DeviceInfoFilter 26 | 27 | # def list(self, request, *args, **kwargs): 28 | # 29 | # # 获取到分类id 30 | # device_category_id = request.query_params.get('id') 31 | # 32 | # # 过滤 33 | # queryset = self.filter_queryset(self.get_queryset()) 34 | # # 分页 35 | # page = self.paginate_queryset(queryset) 36 | # if page is not None: 37 | # serializer = DeviceInfoSerializer(queryset, many=True) 38 | # return self.get_paginated_response(serializer.data) 39 | # # 序列化 40 | # serializer = DeviceInfoSerializer(queryset, many=True) 41 | # data = serializer.data 42 | # return Response(serializer.data) -------------------------------------------------------------------------------- /ruidun_system/safe/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from . import views 3 | 4 | urlpatterns = [ 5 | 6 | ] 7 | 8 | from rest_framework import routers 9 | from .viewsets.dangerused_viewset import DangerUsedViewset 10 | from .viewsets.dangerouscategory_viewset import DangerousCategoryViewset 11 | from .viewsets.dangername_viewset import DangerNameViewset 12 | from .viewsets.priorscheme_viewset import PriorSchemeViewset 13 | from .viewsets.specialscheme_viewset import SpecialSchemeViewset 14 | from .viewsets.method_viewset import MethodViewset 15 | 16 | # 危险品使用记录 17 | router = routers.DefaultRouter() 18 | router.register('dangeruseds', DangerUsedViewset, base_name='dangeruseds' ) 19 | 20 | urlpatterns += router.urls 21 | 22 | 23 | # 危险品分类 24 | router = routers.DefaultRouter() 25 | router.register('dangerouscategorys', DangerousCategoryViewset, base_name='dangerouscategorys' ) 26 | 27 | urlpatterns += router.urls 28 | 29 | 30 | # 危险品名称 31 | router = routers.DefaultRouter() 32 | router.register('dangernames', DangerNameViewset, base_name='dangernames' ) 33 | 34 | urlpatterns += router.urls 35 | 36 | 37 | # 应急方案 38 | router = routers.DefaultRouter() 39 | router.register('priorschemes', PriorSchemeViewset, base_name='priorschemes' ) 40 | 41 | urlpatterns += router.urls 42 | 43 | 44 | # 专项方案 45 | router = routers.DefaultRouter() 46 | router.register('specialschemes', SpecialSchemeViewset, base_name='specialschemes' ) 47 | 48 | urlpatterns += router.urls 49 | 50 | router = routers.DefaultRouter() 51 | router.register('method', MethodViewset , base_name='method' ) 52 | 53 | urlpatterns += router.urls -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/location_card_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | from staff.models import Staff 3 | from rest_framework import serializers 4 | 5 | from internet_setting.models import LocationCard 6 | from staff.models import Staff 7 | from staff.models import Company,Department 8 | 9 | 10 | class LocationCardSerializer(serializers.ModelSerializer): 11 | staff_name = serializers.SerializerMethodField() 12 | 13 | 14 | 15 | class Meta: 16 | model = LocationCard 17 | fields = '__all__' 18 | extra_kwargs = { 19 | "id": {"read_only": True} 20 | } 21 | 22 | def get_staff_name(self, obj): 23 | return Staff.objects.filter(id=obj.card_id).values("name") 24 | 25 | # def validate_staff_id(self, value): 26 | # if Staff.objects.filter(pk=value).count() == 0: 27 | # raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 28 | # return value 29 | # 30 | # def get_department(self, obj): 31 | # return obj.staff.department.name 32 | # 33 | # def get_company(self, obj): 34 | # return obj.staff.company.name 35 | 36 | def create(self, validated_data): 37 | pk = uuid.uuid4() 38 | return LocationCard.objects.create(pk=pk, **validated_data) 39 | 40 | def update(self, instance, validated_data): 41 | instance.status = validated_data.get("status", instance.status) 42 | instance.card_id = validated_data.get("card_id", instance.card_id) 43 | instance.time = validated_data.get("time", instance.time) 44 | instance.save() 45 | return instance 46 | -------------------------------------------------------------------------------- /ruidun_system/safe/viewsets/dangername_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters import rest_framework as filters 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework.viewsets import ModelViewSet 5 | 6 | from ..models import Danger 7 | from ..serializers.dangername_serializer import DangerNameSerializer 8 | 9 | 10 | class DangerFilter(django_filters.FilterSet): 11 | """危险品过滤器""" 12 | # start_time = django_filters.DateTimeFilter() 13 | # start_time_gt = django_filters.DateTimeFilter(field_name='start_time', lookup_expr='gt') 14 | # start_time_lt = django_filters.DateTimeFilter(field_name='start_time', lookup_expr='lte') 15 | # end_time = django_filters.DateTimeFilter() 16 | # end_time_gt = django_filters.DateTimeFilter(field_name='end_time', lookup_expr='gt') 17 | # # danger = django_filters.CharFilter(field_name='danger_id', lookup_expr='name') 18 | # # 物品分类 19 | # category = django_filters.CharFilter(field_name='danger_id', lookup_expr='category_id') 20 | # manager = django_filters.CharFilter(field_name='manager_id', lookup_expr='name') 21 | # user = django_filters.CharFilter(field_name='user_id', lookup_expr='name') 22 | 23 | class Meta: 24 | model = Danger 25 | fields = ['category_id', 'part_id'] 26 | 27 | 28 | class DangerNameViewset(ModelViewSet): 29 | """危险品名称(搜索)""" 30 | 31 | queryset = Danger.objects.filter(is_used=1) 32 | serializer_class = DangerNameSerializer 33 | filterset_class = DangerFilter 34 | filter_backends = (OrderingFilter, filters.DjangoFilterBackend,) 35 | ordering_fields = ('name',) 36 | -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/method_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from ..models import SpecialScheme, Method 5 | 6 | 7 | class MethodSerializer(serializers.ModelSerializer): 8 | """应急演练序列化器""" 9 | 10 | class Meta: 11 | model = Method 12 | fields = '__all__' 13 | extra_kwargs = { 14 | 'id': {'read_only': True}, 15 | } 16 | 17 | def create(self, validated_data): 18 | """新建""" 19 | pk = uuid.uuid4() 20 | 21 | people = self.context["request"].user.staff.name if self.context["request"].user.staff else "匿名用户" 22 | return Method.objects.create(pk=pk,people=people, **validated_data) 23 | 24 | def update(self, instance, validated_data): 25 | """更新,instance为要更新的对象实例""" 26 | instance.name = validated_data.get('name', instance.name) 27 | instance.people = validated_data.get('people', instance.people) 28 | instance.phone = validated_data.get('phone', instance.phone) 29 | instance.time = validated_data.get('time', instance.time) 30 | instance.use_message = validated_data.get('use_message', instance.use_message) 31 | instance.message_content = validated_data.get('message_content', instance.message_content) 32 | instance.set_light = validated_data.get('set_light', instance.set_light) 33 | instance.set_ling = validated_data.get('set_ling', instance.set_ling) 34 | instance.set_voice = validated_data.get('' 35 | 'set_voice', instance.set_voice) 36 | instance.save() 37 | return instance -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/project_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from auth_system.models import Project, Company 5 | 6 | """项目模型序列化""" 7 | class ProjectSerializer(serializers.ModelSerializer): 8 | 9 | company = serializers.SlugRelatedField(label='单位', read_only=True, slug_field="name") 10 | company_id = serializers.CharField(allow_null=True,required=False) 11 | 12 | class Meta: 13 | model = Project 14 | fields = '__all__' 15 | extra_kwargs = { 16 | "id": {"required": False}, 17 | "name": {"required": False} 18 | } 19 | #验证 20 | def validate_company_id(self, value): 21 | if Company.objects.filter(pk=value).count() == 0: 22 | raise serializers.ValidationError("无效的值") 23 | return value 24 | 25 | def create(self, validated_data): 26 | """新建""" 27 | validated_data['id'] = uuid.uuid4() 28 | return Project.objects.create(**validated_data) 29 | 30 | def update(self, instance, validated_data): 31 | """更新,instance为要更新的对象实例""" 32 | instance.name = validated_data.get('name', instance.name) 33 | instance.index = validated_data.get('index', instance.index) 34 | instance.is_used = validated_data.get('is_used', instance.is_used) 35 | instance.company_id = validated_data.get('company_id', instance.company_id) 36 | instance.manager = validated_data.get('manager', instance.manager) 37 | instance.manager_phone = validated_data.get('manager_phone', instance.manager_phone) 38 | instance.save() 39 | return instance -------------------------------------------------------------------------------- /ruidun_system/equipment/serializers/equipmentupkeep_serializer.py: -------------------------------------------------------------------------------- 1 | import time 2 | import uuid 3 | 4 | from rest_framework import serializers 5 | 6 | from staff.models import Staff 7 | from ..models import EquipmentUpkeep, EquipmentInfo 8 | from equipment.serializers.equipmentinfo_serializer import EquipmentinfopSerializer 9 | 10 | class EquipmentUpkeepSerializer(serializers.ModelSerializer): 11 | """工程车辆保养记录序列化器""" 12 | equipment = EquipmentinfopSerializer(read_only=True) 13 | manager = serializers.SlugRelatedField(read_only=True, slug_field="name") 14 | manager_id = serializers.CharField(allow_null=True, required=False) 15 | equipment_id = serializers.CharField(allow_null=True, required=False) 16 | car_age = serializers.SerializerMethodField() 17 | 18 | class Meta: 19 | model = EquipmentUpkeep 20 | fields = '__all__' 21 | extra_kwargs = { 22 | "id": {"required": False} 23 | } 24 | 25 | def get_car_age(self, obj): 26 | a = int(str(obj.equipment.bought_time)[0:4]) 27 | b = int(time.strftime("%Y")) 28 | return b-a+1 29 | 30 | def validate_equipment_id(self, value): 31 | if EquipmentInfo.objects.filter(pk=value).count() == 0: 32 | raise serializers.ValidationError("无效的值") 33 | return value 34 | 35 | def validate_manager_id(self, value): 36 | if Staff.objects.filter(pk=value).count() == 0: 37 | raise serializers.ValidationError("无效的值") 38 | return value 39 | 40 | def create(self, validated_data): 41 | """新建""" 42 | validated_data['id'] = uuid.uuid4() 43 | return EquipmentUpkeep.objects.create(**validated_data) -------------------------------------------------------------------------------- /ruidun_system/equipment/serializers/equipmentrepair_serializer.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | from rest_framework import serializers 4 | 5 | from ..models import EquipmentRepair, EquipmentInfo 6 | 7 | import uuid 8 | 9 | from staff.models import Staff 10 | 11 | from equipment.serializers.equipmentinfo_serializer import EquipmentinfopSerializer 12 | 13 | class EquipmentRepairSerializer(serializers.ModelSerializer): 14 | """工程车辆保养记录序列化器""" 15 | equipment = EquipmentinfopSerializer(read_only=True) 16 | manager = serializers.SlugRelatedField(read_only=True, slug_field="name") 17 | manager_id = serializers.CharField(allow_null=True, required=False) 18 | equipment_id = serializers.CharField(allow_null=True, required=False) 19 | car_age = serializers.SerializerMethodField() 20 | 21 | class Meta: 22 | model = EquipmentRepair 23 | fields = '__all__' 24 | extra_kwargs = { 25 | "id": {"required": False} 26 | } 27 | 28 | def get_car_age(self, obj): 29 | a = int(str(obj.equipment.bought_time)[0:4]) 30 | b = int(time.strftime("%Y")) 31 | return b - a + 1 32 | 33 | def validate_equipment_id(self, value): 34 | if EquipmentInfo.objects.filter(pk=value).count() == 0: 35 | raise serializers.ValidationError("无效的值") 36 | return value 37 | 38 | def validate_manager_id(self, value): 39 | if Staff.objects.filter(pk=value).count() == 0: 40 | raise serializers.ValidationError("无效的值") 41 | return value 42 | 43 | def create(self, validated_data): 44 | """新建""" 45 | validated_data['id'] = uuid.uuid4() 46 | return EquipmentRepair.objects.create(**validated_data) 47 | -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/priorscheme_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from ..models import PriorScheme 5 | 6 | 7 | class PriorSchemeSerializer(serializers.ModelSerializer): 8 | """应急方案序列化器""" 9 | 10 | staff_id = serializers.CharField(label='上传者id') 11 | staff = serializers.SlugRelatedField(label='员工', read_only=True, slug_field='name') 12 | 13 | class Meta: 14 | model = PriorScheme 15 | fields = '__all__' 16 | extra_kwargs = { 17 | 'id': {'read_only': True}, 18 | 'path': {'required': False}, 19 | 'download_times': {'required': False} 20 | } 21 | 22 | def create(self, validated_data): 23 | """新建""" 24 | pk = uuid.uuid4() 25 | 26 | # 没有上传文件抛出错误(考虑到更新时不需要传入文件) 27 | request = self.context['request'] 28 | if not request.data.get('path'): 29 | raise serializers.ValidationError('没有上传文件') 30 | 31 | return PriorScheme.objects.create(pk=pk, **validated_data) 32 | 33 | def update(self, instance, validated_data): 34 | """更新,instance为要更新的对象实例""" 35 | instance.staff_id = validated_data.get('staff_id', instance.staff_id) 36 | instance.name = validated_data.get('name', instance.name) 37 | instance.path = validated_data.get('path', instance.path) 38 | instance.download_times = validated_data.get('download_times', instance.download_times) 39 | instance.reate_time = validated_data.get('reate_time', instance.reate_time) 40 | instance.update_time = validated_data.get('update_time', instance.update_time) 41 | instance.save() 42 | return instance 43 | -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/specialscheme_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from ..models import SpecialScheme 5 | 6 | 7 | class SpecialSchemeSerializer(serializers.ModelSerializer): 8 | """专项方案序列化器""" 9 | 10 | staff_id = serializers.CharField(label='上传者id') 11 | staff = serializers.SlugRelatedField(label='员工', slug_field='name', read_only=True) 12 | 13 | class Meta: 14 | model = SpecialScheme 15 | fields = '__all__' 16 | extra_kwargs = { 17 | 'id': {'read_only':True}, 18 | 'path': {'required': False}, 19 | 'download_times': {'required': False} 20 | } 21 | 22 | def create(self, validated_data): 23 | """新建""" 24 | pk = uuid.uuid4() 25 | 26 | # 没有上传文件抛出错误(考虑到更新时不需要传入文件) 27 | request = self.context['request'] 28 | if not request.data.get('path'): 29 | raise serializers.ValidationError('没有上传文件') 30 | 31 | return SpecialScheme.objects.create(pk=pk, **validated_data) 32 | 33 | def update(self, instance, validated_data): 34 | """更新,instance为要更新的对象实例""" 35 | instance.staff_id = validated_data.get('staff_id', instance.staff_id) 36 | instance.name = validated_data.get('name', instance.name) 37 | instance.path = validated_data.get('path', instance.path) 38 | instance.download_times = validated_data.get('download_times', instance.download_times) 39 | instance.reate_time = validated_data.get('reate_time', instance.reate_time) 40 | instance.update_time = validated_data.get('update_time', instance.update_time) 41 | instance.save() 42 | return instance -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/usermouthwork_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework.response import Response 2 | from rest_framework.viewsets import ModelViewSet 3 | import django_filters as filters 4 | from django_filters.rest_framework import DjangoFilterBackend 5 | from rest_framework.filters import OrderingFilter 6 | from ..models import Staff, UserWork 7 | from ..serializers.usermouthwork_serializer import UserMouthWorkSerializer 8 | import calendar 9 | import datetime 10 | 11 | class UserWorkWorkFilter(filters.FilterSet): 12 | """根据时间,姓名,部门查询出勤率""" 13 | department = filters.CharFilter(field_name="department_id", lookup_expr="name") 14 | class Meta: 15 | model = Staff 16 | fields = ["name", "department", "department_id", "part_id"] 17 | 18 | 19 | class UserMouthWorkViewset(ModelViewSet): 20 | """月考勤信息时间排序在序列化器里面""" 21 | queryset = Staff.objects.all() 22 | serializer_class = UserMouthWorkSerializer 23 | filterset_class = UserWorkWorkFilter 24 | # filter_backends = [OrderingFilter, DjangoFilterBackend] 25 | # ordering_fields = ("staff_id__name", "time") 26 | # def get_queryset(self): 27 | # def list(self, request, *args, **kwargs): 28 | # queryset = self.filter_queryset(self.get_queryset()) 29 | # print(request) 30 | # 31 | # page = self.paginate_queryset(queryset) 32 | # if page is not None: 33 | # serializer = self.get_serializer(page, many=True, context={"time_limit": request.data.get("time_limit")}) 34 | # return self.get_paginated_response(serializer.data) 35 | # 36 | # serializer = self.get_serializer(queryset, many=True, context={"time_limit": request.data.get("time_limit")}) 37 | # return Response(serializer.data) 38 | -------------------------------------------------------------------------------- /ruidun_system/equipment/serializers/equipmentused_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from equipment.serializers.equipmentinfo_serializer import EquipmentinfosSerializer 6 | 7 | from ..models import EquipmentUsed, EquipmentInfo 8 | from staff.models import Staff 9 | class EquipmentUsedSerializer(serializers.ModelSerializer): 10 | """工程车辆使用记录序列化器""" 11 | equipment = EquipmentinfosSerializer(read_only=True) 12 | manager = serializers.SlugRelatedField(label='负责人', read_only=True, slug_field="name") 13 | user = serializers.SlugRelatedField(label='使用人', read_only=True, slug_field="name") 14 | manager_id = serializers.CharField(allow_null=True, required=False) 15 | user_id = serializers.CharField(allow_null=True, required=False) 16 | equipment_id = serializers.CharField(allow_null=True, required=False) 17 | 18 | class Meta: 19 | model = EquipmentUsed 20 | fields = '__all__' 21 | extra_kwargs = { 22 | "id": {"required": False}, 23 | } 24 | 25 | def validate_manager_id(self, value): 26 | if Staff.objects.filter(pk=value).count() == 0: 27 | raise serializers.ValidationError("无效的值") 28 | return value 29 | 30 | def validate_user_id(self, value): 31 | if Staff.objects.filter(pk=value).count() == 0: 32 | raise serializers.ValidationError("无效的值") 33 | return value 34 | 35 | def validate_equipment_id(self, value): 36 | if EquipmentInfo.objects.filter(pk=value).count() == 0: 37 | raise serializers.ValidationError("无效的值") 38 | return value 39 | 40 | def create(self, validated_data): 41 | """新建""" 42 | validated_data['id'] = uuid.uuid4() 43 | return EquipmentUsed.objects.create(**validated_data) -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/device_upkeep_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from internet_setting.models import DeviceUpkeep, DeviceInfo 6 | from staff.models import Staff 7 | 8 | 9 | class DeviceUpkeepSerializer(serializers.ModelSerializer): 10 | manager = serializers.SlugRelatedField(slug_field='name', read_only=True) 11 | manager_id = serializers.CharField(allow_null=True, required=False) 12 | device = serializers.SlugRelatedField(slug_field='name', read_only=True) 13 | device_id = serializers.CharField(allow_null=True, required=False) 14 | 15 | class Meta: 16 | model = DeviceUpkeep 17 | fields = '__all__' 18 | extra_kwargs = { 19 | "id": {"read_only": True} 20 | } 21 | 22 | def validate_manager_id(self, value): 23 | if Staff.objects.filter(pk=value).count() == 0: 24 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 25 | return value 26 | 27 | def validate_device_id(self, value): 28 | if DeviceInfo.objects.filter(pk=value).count() == 0: 29 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 30 | return value 31 | 32 | def create(self, validated_data): 33 | pk = uuid.uuid4() 34 | return DeviceUpkeep.objects.create(pk=pk, **validated_data) 35 | 36 | def update(self, instance, validated_data): 37 | instance.manager_id = validated_data.get("manager_id", instance.manager_id) 38 | instance.device_id = validated_data.get("device_id", instance.device_id) 39 | instance.upkeep_man = validated_data.get("upkeep_man", instance.upkeep_man) 40 | instance.time = validated_data.get("time", instance.time) 41 | 42 | instance.save() 43 | return instance -------------------------------------------------------------------------------- /ruidun_system/equipment/viewsets/equipmentinfo_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework.decorators import action 2 | from rest_framework.permissions import IsAuthenticated 3 | from rest_framework.response import Response 4 | from lib.model_viewset import ModelViewSet 5 | import django_filters as filters 6 | from django_filters.rest_framework import DjangoFilterBackend 7 | from rest_framework.filters import OrderingFilter 8 | 9 | # from lib.user_permission import SelfPermission 10 | from ..models import EquipmentInfo 11 | from ..serializers.equipmentinfo_serializer import EquipmentInfoSerializer, EquipmentinfosSerializer, EquipmentinfopSerializer 12 | 13 | """基础信息搜索查询""" 14 | class EquipmentinfoFilter(filters.FilterSet): 15 | # company_name = filters.CharFilter(field_name="company_id", lookup_expr='name') 16 | class Meta: 17 | model = EquipmentInfo 18 | fields = ["factory", 'model', "company_id", "name", "part_id"] 19 | 20 | 21 | class EquipmentInfoViewSet(ModelViewSet): 22 | 23 | queryset = EquipmentInfo.objects.filter().all() 24 | serializer_class = EquipmentInfoSerializer 25 | filterset_class = EquipmentinfoFilter 26 | filter_backends = [OrderingFilter, DjangoFilterBackend] 27 | ordering_fields = ("bought_time", "id") 28 | # permission_classes = [SelfPermission, IsAuthenticated] 29 | 30 | @action(methods=["GET"], detail=False) 31 | def get_names(self, request): 32 | query = self.queryset 33 | data = map(lambda obj: {"id": obj.id, "name": "%s" % obj.name}, query) 34 | return Response(data=data, status=200) 35 | 36 | 37 | class EquipmentInfosViewSet(ModelViewSet): 38 | queryset = EquipmentInfo.objects.all() 39 | serializer_class = EquipmentinfosSerializer 40 | 41 | 42 | class EquipmentInfopViewSet(ModelViewSet): 43 | queryset = EquipmentInfo.objects.all() 44 | serializer_class = EquipmentinfopSerializer -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/ipswitch_detail_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import Part 6 | from internet_setting.models import Voice, VoiceServer, IPSwitch, IPSwitchDetail 7 | 8 | 9 | class IPSwitchDetailSerializer(serializers.ModelSerializer): 10 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 11 | part_id = serializers.CharField(allow_null=True, required=False) 12 | ipswitch = serializers.SlugRelatedField(slug_field='name', read_only=True) 13 | ipswitch_id = serializers.CharField(allow_null=True, required=False) 14 | 15 | class Meta: 16 | model = IPSwitchDetail 17 | fields = '__all__' 18 | extra_kwargs = { 19 | "id": {"read_only": True}, 20 | } 21 | 22 | def validate_part_id(self, value): 23 | if Part.objects.filter(pk=value).count() == 0: 24 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 25 | return value 26 | 27 | def validate_ipswitch_id(self, value): 28 | if IPSwitch.objects.filter(pk=value).count() == 0: 29 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 30 | return value 31 | 32 | def create(self, validated_data): 33 | pk = uuid.uuid4() 34 | return IPSwitchDetail.objects.create(pk=pk, **validated_data) 35 | 36 | def update(self, instance, validated_data): 37 | instance.number = validated_data.get("part_id", instance.part_id) 38 | instance.ipswitch_id = validated_data.get("server_id", instance.server_id) 39 | instance.content = validated_data.get("note", instance.note) 40 | instance.note = validated_data.get("is_used", instance.is_used) 41 | instance.part_id = validated_data.get("status", instance.status) 42 | 43 | instance.save() 44 | return instance 45 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/ipswitch_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import Part 6 | from internet_setting.models import VoiceServer, IPSwitch 7 | from internet_setting.serializers.ipswitch_detail_serializer import IPSwitchDetailSerializer 8 | 9 | 10 | class IPSwitchSerializer(serializers.ModelSerializer): 11 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 12 | part_id = serializers.CharField(allow_null=True, required=False) 13 | detail = serializers.SerializerMethodField() 14 | 15 | class Meta: 16 | model = IPSwitch 17 | fields = '__all__' 18 | extra_kwargs = { 19 | "id": {"read_only": True}, 20 | } 21 | 22 | def get_detail(self, obj): 23 | return IPSwitchDetailSerializer(obj.detail.all(), many=True).data 24 | 25 | def validate_part_id(self, value): 26 | if Part.objects.filter(pk=value).count() == 0: 27 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 28 | return value 29 | 30 | def create(self, validated_data): 31 | pk = uuid.uuid4() 32 | return IPSwitch.objects.create(pk=pk, **validated_data) 33 | 34 | def update(self, instance, validated_data): 35 | instance.name = validated_data.get("name", instance.name) 36 | instance.ip = validated_data.get("ip", instance.ip) 37 | instance.part_id = validated_data.get("part_id", instance.part_id) 38 | instance.port = validated_data.get("port", instance.port) 39 | instance.note = validated_data.get("note", instance.note) 40 | instance.x = validated_data.get("x", instance.x) 41 | instance.y = validated_data.get("y", instance.y) 42 | # instance.is_used = validated_data.get("is_used", instance.is_used) 43 | 44 | instance.save() 45 | return instance 46 | -------------------------------------------------------------------------------- /ruidun_system/system_manage/fixtures/system_manage.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "model": "system_manage.artificiallogcategory", 4 | "pk": 1, 5 | "fields": { 6 | "index": 1, 7 | "is_used": 1, 8 | "name": "\u4e00\u822c\u65e5\u5fd7" 9 | } 10 | }, 11 | { 12 | "model": "system_manage.artificiallogcategory", 13 | "pk": 2, 14 | "fields": { 15 | "index": 3, 16 | "is_used": 1, 17 | "name": "\u91cd\u8981\u65e5\u5fd7" 18 | } 19 | }, 20 | { 21 | "model": "system_manage.artificiallogcategory", 22 | "pk": 3, 23 | "fields": { 24 | "index": 2, 25 | "is_used": 1, 26 | "name": "\u6781\u91cd\u8981\u65e5\u5fd7" 27 | } 28 | }, 29 | { 30 | "model": "system_manage.artificiallog", 31 | "pk": "1", 32 | "fields": { 33 | "name": "\u65e5\u5fd71", 34 | "user": 10, 35 | "category": 1, 36 | "time": "2019-03-15T14:09:30.151Z", 37 | "status": true, 38 | "level": 5 39 | } 40 | }, 41 | { 42 | "model": "system_manage.artificiallog", 43 | "pk": "2", 44 | "fields": { 45 | "name": "\u65e5\u5fd72", 46 | "user": 10, 47 | "category": 2, 48 | "time": "2019-03-15T14:09:32.256Z", 49 | "status": true, 50 | "level": 6 51 | } 52 | }, 53 | { 54 | "model": "system_manage.artificiallog", 55 | "pk": "3", 56 | "fields": { 57 | "name": "\u65e5\u5fd73", 58 | "user": 11, 59 | "category": 1, 60 | "time": "2019-03-19T14:09:33.320Z", 61 | "status": true, 62 | "level": 1 63 | } 64 | }, 65 | { 66 | "model": "system_manage.artificiallog", 67 | "pk": "4", 68 | "fields": { 69 | "name": "\u65e5\u5fd74", 70 | "user": 12, 71 | "category": 1, 72 | "time": "2019-03-24T14:09:34.488Z", 73 | "status": true, 74 | "level": 5 75 | } 76 | } 77 | ] -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/part_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from auth_system.models import Project, Part 5 | 6 | """工区模型序列化""" 7 | 8 | 9 | class PartSerializer(serializers.ModelSerializer): 10 | project = serializers.SlugRelatedField(read_only=True, slug_field="name") 11 | project_id = serializers.CharField(allow_null=True, required=False) 12 | company = serializers.SerializerMethodField() 13 | company_id = serializers.SerializerMethodField() 14 | class Meta: 15 | model = Part 16 | fields = '__all__' 17 | extra_kwargs = { 18 | "id": {"required": False}, 19 | "name": {"required": False}, 20 | "sysid":{"required": False} 21 | } 22 | 23 | def get_company(self, obj): 24 | return obj.project.company.name 25 | 26 | def get_company_id(self, obj): 27 | return obj.project.company.id 28 | 29 | # 验证 30 | def validate_project_id(self, value): 31 | if Project.objects.filter(pk=value).count() == 0: 32 | raise serializers.ValidationError("无效的值") 33 | return value 34 | 35 | def create(self, validated_data): 36 | """新建""" 37 | validated_data['id'] = uuid.uuid4() 38 | return Part.objects.create(**validated_data) 39 | 40 | def update(self, instance, validated_data): 41 | """更新,instance为要更新的对象实例""" 42 | instance.name = validated_data.get('name', instance.name) 43 | instance.index = validated_data.get('index', instance.index) 44 | instance.is_used = validated_data.get('is_used', instance.is_used) 45 | instance.project_id = validated_data.get('project_id', instance.project_id) 46 | instance.manager = validated_data.get('manager', instance.manager) 47 | instance.manager_phone = validated_data.get('manager_phone', instance.manager_phone) 48 | instance.save() 49 | return instance -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/departmentwork_serializer.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import uuid 3 | 4 | from rest_framework import serializers 5 | from staff.models import UserWork 6 | from staff.models import Department 7 | 8 | 9 | class DepartmentworkSerializer(serializers.ModelSerializer): 10 | department_group = serializers.SerializerMethodField() 11 | time = serializers.SerializerMethodField() 12 | fact = serializers.SerializerMethodField() 13 | real = serializers.SerializerMethodField() 14 | rate = serializers.SerializerMethodField() 15 | 16 | 17 | class Meta: 18 | model = Department 19 | fields = "__all__" 20 | extra_kwargs = { 21 | "id": {"required": False} 22 | } 23 | 24 | def get_department_group(self, obj): 25 | return obj.department+'/'+obj.group_name 26 | 27 | def get_time(self, obj): 28 | yes_time = (datetime.datetime.now() + datetime.timedelta()).strftime("%Y-%m-%d") 29 | time = self.context["request"].query_params.get("time", yes_time) 30 | return time 31 | 32 | def get_fact(self, obj): 33 | return obj.staff.count() 34 | 35 | def get_real(self, obj): 36 | yes_time = (datetime.datetime.now()+datetime.timedelta()).strftime("%Y-%m-%d") 37 | time = self.context["request"].query_params.get("time", yes_time) 38 | ids = obj.staff.all().values("id") 39 | lists = [i["id"] for i in ids] 40 | real = UserWork.objects.filter(time=time, staff_id__in=lists, work_time__gt=0).count() 41 | return real 42 | 43 | def get_rate(self, obj): 44 | if self.get_fact(obj) == 0: 45 | return "0.0%" 46 | else: 47 | return str((self.get_real(obj)/self.get_fact(obj))*100)[0:5]+"%" 48 | 49 | def validate_department_id(self, value): 50 | if Department.objects.filter(pk=value).count() == 0: 51 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 52 | return value 53 | 54 | 55 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/led_viewset.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | import django_filters 4 | from django_filters.rest_framework import DjangoFilterBackend 5 | from rest_framework import status 6 | from rest_framework.decorators import action 7 | from rest_framework.filters import OrderingFilter 8 | from rest_framework.response import Response 9 | 10 | from client.ipled import Client 11 | from lib.model_viewset import ModelViewSet 12 | 13 | from internet_setting.models import LEDInfo 14 | from internet_setting.serializers.led_serializer import LEDInfoSerializer 15 | 16 | 17 | class LEDInfoFilter(django_filters.FilterSet): 18 | '''可以根据时间区间, 是否损坏, 厂家id, 型号, 分类等来过滤''' 19 | 20 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 21 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 22 | 23 | class Meta: 24 | model = LEDInfo 25 | fields = ["time__gt", 'time__lt', 'status', 'factory', 'model'] 26 | 27 | 28 | class LEDInfoViewSet(ModelViewSet): 29 | """ 30 | A simple ViewSet for viewing and editing accounts. 31 | """ 32 | queryset = LEDInfo.objects.all() 33 | serializer_class = LEDInfoSerializer 34 | # permission_classes = [SelfPermission] 35 | filterset_class = LEDInfoFilter 36 | filter_backends = [OrderingFilter, DjangoFilterBackend] 37 | ordering_fields = ('time', 'status') 38 | 39 | @action(methods=['POST'], detail=False) 40 | def control_led(self, request): 41 | client = Client() 42 | client.pText = request.data.get("pText", "") # 控制显示文字 43 | client.nScreenNo = request.data.get("nScreenNo", "1") 44 | # client.nSendCmd = request.data.get("nSendCmd", "41456") 45 | client.nStunt = request.data.get("nStunt", "4") 46 | # print(client.pText) 47 | try: 48 | result = client.send() 49 | return Response(data=result, status=200) 50 | except Exception: 51 | return Response(data={"message": "LED屏幕连接异常"}, status=status.HTTP_200_OK) 52 | 53 | 54 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/project_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters as filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from lib import model_viewset 5 | from auth_system.models import Project 6 | from ..serializers.project_serializer import ProjectSerializer 7 | from rest_framework.decorators import action 8 | from rest_framework.response import Response 9 | import numpy as np 10 | import pandas as pd 11 | import os 12 | 13 | 14 | class ProjectFilter(filters.FilterSet): 15 | '''可以根据项目名称,公司名称等来过滤''' 16 | 17 | company_name = filters.CharFilter(field_name="company_id", lookup_expr="name") 18 | 19 | class Meta: 20 | model = Project 21 | fields = ["name", "company_name"] 22 | 23 | 24 | class ProjectViewset(model_viewset.ModelViewSet): 25 | """项目模型""" 26 | queryset = Project.objects.filter(is_used=1).all() 27 | serializer_class = ProjectSerializer 28 | filterset_class = ProjectFilter 29 | filter_backends = [OrderingFilter, DjangoFilterBackend] 30 | 31 | @action(methods=["GET"], detail=False) 32 | def project_out(self, request): 33 | id_str = request.query_params.get("list") 34 | if not id_str: 35 | return Response({"msg": "请勾选导出的内容"}, status=200) 36 | else: 37 | id_list = id_str.split(",") 38 | 39 | value = self.queryset.filter(id__in=id_list).values("name", "company_id__name", "manager", "manager_phone") 40 | 41 | array = [list(array.values()) for array in value] 42 | 43 | excel = pd.DataFrame(np.array(array), columns=["项目名称", "所属公司", "负责人", "负责人电话"]) 44 | 45 | filepath = "media/xlsx/project.xlsx" 46 | if os.path.exists(filepath): 47 | os.remove(filepath) 48 | excel.to_excel(filepath) 49 | path = request.META.get('SERVER_PROTOCOL').split("/")[0].lower() + "://" + request.META.get( 50 | 'HTTP_HOST') + "/" + filepath 51 | return Response({"path": path}, status=200) 52 | -------------------------------------------------------------------------------- /ruidun_system/client/ipswitch.py: -------------------------------------------------------------------------------- 1 | #coding=utf-8 2 | from common.cfg import Config 3 | from common.myfuncs import Funcs 4 | from common.myproxy import Proxy 5 | 6 | ''' 7 | ipswitch开关客户端接口 8 | ''' 9 | class Client: 10 | device='ipswitch' #设备类型 11 | token='...' #暂略 12 | 13 | ip="192.168.1.166" 14 | port=1234 15 | cmd = "device=?" 16 | 17 | ''' 18 | #命令示例 19 | cmd = "device=?" #查看设备信息,返回值:{"sn":"0369127442293896","devicename":"0369127442293896","hver":"ZMRN0808-V6M","mqtt_user":"","mqtt_psw":"","ip":"192.168.1.166","tcport":1234,"cmd":"device"} 20 | cmd = "restart=?" #重启设备,返回值:{"sn":"0369127442293896","cmd":"restart"} 21 | cmd = "state=?" #查询设备状态,返回值:{"cmd":"state","output":"10000000","input":"00000000","sn":"0369127442293896"} 22 | cmd = "setr=1x0xxxxx" #输出控制,setr=输出值,返回值{"cmd":"setr","output":"10000000","input":"00000000","sn":"0369127442293896"} 23 | ''' 24 | 25 | ''' 26 | 发送:setr=输出值 27 | 8 通道输出值为 8 字节, 28 | ’0’表示关,’1’表示 开,’2’表示点触,’3’表示翻转,’4’表示互锁,’x’表示不动作。 29 | ‘2’:表示点动输出,实现打开,然后延时,然后自动关闭。 30 | ‘3’:表示翻转,以前开,翻转后为关;以前是关,翻转后是开。 31 | ’4’:表示相邻 2 个互锁;互锁为 1-2,3-4,5-6 这样成对出现。 如果成对的控制中,不能出现 14 或 24 命令。 32 | 例如控制继电器 1 打开,则发送字符串 setr=1xxxxxxx 控制继电器 2 关闭,则发送字符串 setr=x0xxxxxx 33 | 34 | output 表示输出状态,1 表示有输出,0 表示无输出 35 | input 表示输入状态,1 表示有输入,0 表示无输入 36 | 37 | ''' 38 | 39 | def __init__(self,ip,port,cmd): 40 | self.cfg = Config() 41 | self.url = self.cfg.get('main', 'url') + "/device" 42 | 43 | self.ip=ip 44 | self.port=port 45 | self.cmd=cmd 46 | 47 | pass 48 | 49 | def send(self): 50 | #参数示例 51 | data={} 52 | data["token"]=self.token 53 | data["device"]=self.device 54 | 55 | data["ip"]=self.ip 56 | data["port"]=Funcs.toInt(self.port) 57 | 58 | data["cmd"]=self.cmd 59 | 60 | result=Proxy.send(self.url,data) 61 | return result 62 | 63 | if __name__ == '__main__': 64 | obj=Client("192.168.1.166",1234,"setr=1x1xxxxx") 65 | result=obj.send() 66 | print(result) 67 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/monitor_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from lib.model_viewset import ModelViewSet 5 | from rest_framework.decorators import action 6 | from rest_framework.response import Response 7 | from internet_setting.models import LEDInfo, MonitorInfo 8 | from internet_setting.serializers.led_serializer import LEDInfoSerializer 9 | from internet_setting.serializers.monitor_serializer import MonitorInfoSerializer 10 | 11 | 12 | class MonitorInfoFilter(django_filters.FilterSet): 13 | '''可以根据时间区间, 是否损坏, 厂家id, 型号, 分类等来过滤''' 14 | 15 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 16 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 17 | 18 | class Meta: 19 | model = MonitorInfo 20 | fields = ["time__gt", 'time__lt', 'status', 'factory', 'model'] 21 | 22 | 23 | class MonitorInfoViewSet(ModelViewSet): 24 | """ 25 | A simple ViewSet for viewing and editing accounts. 26 | """ 27 | queryset = MonitorInfo.objects.all().order_by("number") 28 | serializer_class = MonitorInfoSerializer 29 | # permission_classes = [SelfPermission] 30 | filterset_class = MonitorInfoFilter 31 | filter_backends = [OrderingFilter, DjangoFilterBackend] 32 | ordering_fields = ('time', 'status') 33 | 34 | @action(methods=["GET"], detail=False) 35 | def monitor_order(self, request): 36 | id_list=[] 37 | monitor = MonitorInfo.objects.all().order_by("number") 38 | numbers = request.query_params.get("number_list") 39 | number_list = numbers.split(",") 40 | ids = monitor.values("id") 41 | for i in ids: 42 | id_list.append(i["id"]) 43 | for i in range(len(number_list)): 44 | change = MonitorInfo.objects.get(id=id_list[i]) 45 | change.number = number_list[i] 46 | change.save() 47 | return Response(data={"msg":"ok"}, status=200) 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/monitor_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import Part 6 | from internet_setting.models import LEDInfo, MonitorInfo 7 | 8 | 9 | class MonitorInfoSerializer(serializers.ModelSerializer): 10 | 11 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 12 | part_id = serializers.CharField(allow_null=True, required=False) 13 | 14 | class Meta: 15 | model = MonitorInfo 16 | fields = "__all__" 17 | extra_kwargs = { 18 | "id":{"read_only": True} 19 | } 20 | 21 | # 关于外键的需要单独验证,因为外键字段指定两个序列化字段会出现问题 22 | 23 | def validate_part_id(self, value): 24 | if Part.objects.filter(pk=value).count() == 0: 25 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 26 | return value 27 | 28 | def create(self, validated_data): 29 | validated_data["id"] = uuid.uuid4() # 添加一个唯一的UUID为主键 30 | return LEDInfo.objects.create(**validated_data) 31 | 32 | def update(self, instance, validated_data): 33 | # 因为有可能没有传过来,所以用字典.get() 方法 34 | instance.name = validated_data.get("name", instance.name) 35 | instance.time = validated_data.get("time", instance.bought_time) 36 | instance.location = validated_data.get("location", instance.location) 37 | instance.factory = validated_data.get("factory", instance.factory) 38 | instance.model= validated_data.get("model", instance.model) 39 | instance.ip = validated_data.get("ip", instance.ip) 40 | instance.port = validated_data.get("port", instance.port) 41 | instance.part_id = validated_data.get("part_id", instance.part_id) 42 | instance.is_used = validated_data.get("is_used", instance.is_used) 43 | instance.status = validated_data.get("status", instance.status) 44 | instance.note = validated_data.get("note", instance.note) 45 | instance.x = validated_data.get("x", instance.x) 46 | instance.y = validated_data.get("y", instance.y) 47 | 48 | instance.save() 49 | return instance 50 | 51 | 52 | -------------------------------------------------------------------------------- /ruidun_system/internet_operate/viewsets/led_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.decorators import action 3 | from rest_framework.response import Response 4 | from rest_framework.viewsets import ViewSet 5 | 6 | from internet_setting.models import DeviceInfo 7 | 8 | 9 | class LedViewSet(ViewSet): 10 | "音箱相关接口" 11 | 12 | @action(methods=['post'], detail=False) 13 | def control(self, request): 14 | "控制led开关的接口" 15 | part_id = request.data.get('part_id') 16 | ids = request.data.get('ids', []) 17 | act = request.data.get('action') 18 | if not all([part_id, ids, act]): 19 | return Response(data={'message': "参数不足"}, status=status.HTTP_400_BAD_REQUEST) 20 | # 校验操作方式和操作ids是否符合规则 21 | if act not in ["open", "down"]: 22 | return Response(data={'message': "操作方式错误"}, status=status.HTTP_400_BAD_REQUEST) 23 | if DeviceInfo.objects.filter(id__in=ids).count() != len(ids): 24 | return Response(data={'message': "操作LED id错误,部分id不存在"}, status=status.HTTP_400_BAD_REQUEST) 25 | 26 | # 调用硬件接口: 27 | result, message = 开启led接口(part_id = part_id, ids=ids, act=act) 28 | return Response(data={"reslut": result, "message":message}, status=status.HTTP_200_OK) 29 | 30 | @action(methods=['post'], detail=False) 31 | def voice(self, request): 32 | "控制音箱播放的接口" 33 | part_id = request.data.get('part_id') 34 | ids = request.data.get('ids', []) 35 | content = request.data.get('content') 36 | font = request.data.get('font') 37 | size = request.data.get('size') 38 | if not all([ids, content, font, size, part_id]): 39 | return Response(data={'message': "参数不足"}, status=status.HTTP_400_BAD_REQUEST) 40 | # 校验操作方式和操作ids是否符合规则 41 | if DeviceInfo.objects.filter(id__in=ids).count() != len(ids): 42 | return Response(data={'message': "操作音箱id错误,部分id不存在"}, status=status.HTTP_400_BAD_REQUEST) 43 | 44 | # 调用硬件接口: 45 | result, message = 控制led显示接口(part_id=part_id, ids=ids, content=content, font=font, size=size) 46 | return Response(data={"reslut": result, "message": message}, status=status.HTTP_200_OK) -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/voice_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import Part 6 | from internet_setting.models import Voice, VoiceServer 7 | 8 | 9 | class VoiceSerializer(serializers.ModelSerializer): 10 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 11 | server = serializers.SlugRelatedField(slug_field='name', read_only=True) 12 | part_id = serializers.CharField(allow_null=True, required=False) 13 | server_id = serializers.CharField(allow_null=True, required=False) 14 | 15 | class Meta: 16 | model = Voice 17 | fields = '__all__' 18 | extra_kwargs = { 19 | # "id": {"read_only": True}, 20 | } 21 | 22 | def validate_part_id(self, value): 23 | if Part.objects.filter(pk=value).count() == 0: 24 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 25 | return value 26 | 27 | def validate_server_id(self, value): 28 | if VoiceServer.objects.filter(pk=value).count() == 0: 29 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 30 | return value 31 | 32 | def create(self, validated_data): 33 | # pk = uuid.uuid4() 34 | return Voice.objects.create(**validated_data) 35 | 36 | def update(self, instance, validated_data): 37 | instance.name = validated_data.get("name", instance.name) 38 | instance.part_id = validated_data.get("part_id", instance.part_id) 39 | instance.server_id = validated_data.get("server_id", instance.server_id) 40 | instance.note = validated_data.get("note", instance.note) 41 | instance.is_used = validated_data.get("is_used", instance.is_used) 42 | instance.status = validated_data.get("status", instance.status) 43 | instance.factory = validated_data.get("factory", instance.factory) 44 | instance.model = validated_data.get("model", instance.model) 45 | instance.time = validated_data.get("time", instance.time) 46 | instance.x = validated_data.get("x", instance.x) 47 | instance.y = validated_data.get("y", instance.y) 48 | 49 | instance.save() 50 | return instance 51 | -------------------------------------------------------------------------------- /ruidun_system/lib/user_permission.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import uuid 3 | 4 | from pymysql import * 5 | from django.conf import settings 6 | from rest_framework.permissions import BasePermission 7 | 8 | from system_manage.models import ArtificialLog 9 | 10 | 11 | class SelfPermission(BasePermission): 12 | 13 | def has_permission(self, request, view): 14 | permissions = self.get_user_permissions(request) 15 | # print(request.user) 16 | # print(request.method) 17 | # print(view.__class__.__name__) 18 | 19 | if request.method == "POST": 20 | category = "增加数据" 21 | elif request.method == "PUT": 22 | category = "修改数据" 23 | elif request.method == "DELETE": 24 | category = "删除数据" 25 | else: 26 | category = "" 27 | if category: 28 | try: 29 | object = view.serializer_class.Meta.model._meta.verbose_name 30 | except Exception: 31 | return True 32 | user = request.user.username 33 | time = datetime.datetime.now() 34 | ArtificialLog.objects.create(pk=uuid.uuid4(), user=user, category=category, time=time, object=object) 35 | # print(category, user, time, object) 36 | 37 | # if view.__class__.__name__ == "CompanyViewSet": 38 | # if request.method == 'GET': 39 | # return 'view_company' in permissions 40 | # else: 41 | # return 'change_company' in permissions 42 | # elif view.__class__.__name__ == "StaffViewSet": 43 | # if request.method == 'GET': 44 | # return 'view_staff' in permissions 45 | # else: 46 | # return 'change_staff' in permissions 47 | return True 48 | 49 | @staticmethod 50 | def get_user_permissions(request): 51 | user = request.user 52 | user_id = user.id 53 | # 如果没有登录用户为未认证类型,id为None,所以判断不为空再执行下边逻辑 54 | if user_id: 55 | permissions_all = user.groups.first().permissions.all() 56 | permissions = map(lambda per: per.codename, permissions_all) 57 | 58 | else: 59 | permissions = tuple() 60 | 61 | return permissions 62 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/team_viewset.py: -------------------------------------------------------------------------------- 1 | from rest_framework import status 2 | from rest_framework.response import Response 3 | from lib.model_viewset import ModelViewSet 4 | from rest_framework.filters import OrderingFilter 5 | from django_filters import rest_framework as filters 6 | 7 | from staff.models import Team, Staff 8 | from work_area.serializers.team_serializer import TeamSerializer 9 | from work_area.serializers.staffstatus_serializer import StaffSerializer 10 | 11 | 12 | class TeamViewset(ModelViewSet): 13 | """施工班组""" 14 | 15 | # TODO 等待传入当前工区id 16 | # part_id = 2 17 | # queryset = Team.objects.filter(part__id=part_id) 18 | serializer_class = TeamSerializer 19 | # filter_backends = (OrderingFilter, filters.DjangoFilterBackend,) 20 | # ordering_fields = ('name',) 21 | 22 | def get_queryset(self): 23 | part_id = self.request.query_params.get("part_id", self.request.user.default_part_id if self.request.user.default_part_id else "88888") 24 | return Team.objects.filter(part__id=part_id) 25 | 26 | def list(self, request, *args, **kwargs): 27 | # 过滤 28 | queryset = self.filter_queryset(self.get_queryset()) 29 | # 分页 30 | page = self.paginate_queryset(queryset) 31 | if page is not None: 32 | serializer = self.get_serializer(page, many=True) 33 | data = serializer.data 34 | 35 | if not data: 36 | return Response({'error':'请求数据不存在'}, status=status.HTTP_400_BAD_REQUEST) 37 | 38 | group_id = data[0]['id'] 39 | a = Staff.objects.filter(group_id=group_id) 40 | staff = StaffSerializer(a, many=True).data 41 | 42 | data[0]['staff'] = staff 43 | return self.get_paginated_response(data) 44 | # 序列化 45 | serializer = self.get_serializer(queryset, many=True) 46 | data = serializer.data 47 | 48 | if not data: 49 | return Response({'error': '请求数据不存在'}, status=status.HTTP_400_BAD_REQUEST) 50 | 51 | group_id = data[0]['id'] 52 | a = Staff.objects.filter(group_id=group_id) 53 | staff = StaffSerializer(a, many=True).data 54 | 55 | data[0]['staff'] = staff 56 | 57 | return Response(data) -------------------------------------------------------------------------------- /ruidun_system/safe/fixtures/dangers.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "model": "safe.dangerouscategory", 4 | "pk": "1", 5 | "fields": { 6 | "create_time": "2019-03-12T00:00:00Z", 7 | "update_time": "2019-03-12T00:00:00Z", 8 | "index": 1, 9 | "is_used": 1, 10 | "name": "\u6d88\u8017\u54c1" 11 | } 12 | }, 13 | { 14 | "model": "safe.dangerouscategory", 15 | "pk": "2", 16 | "fields": { 17 | "create_time": "2019-03-12T00:00:00Z", 18 | "update_time": "2019-03-12T00:00:00Z", 19 | "index": 2, 20 | "is_used": 1, 21 | "name": "\u7206\u7834\u54c1" 22 | } 23 | }, 24 | { 25 | "model": "safe.danger", 26 | "pk": "1", 27 | "fields": { 28 | "create_time": "2019-03-12T00:00:00Z", 29 | "update_time": "2019-03-12T00:00:00Z", 30 | "index": 1, 31 | "is_used": 1, 32 | "category": "1", 33 | "part": "1", 34 | "name": "\u786b\u9178", 35 | "count": 20 36 | } 37 | }, 38 | { 39 | "model": "safe.danger", 40 | "pk": "2", 41 | "fields": { 42 | "create_time": "2019-03-12T00:00:00Z", 43 | "update_time": "2019-03-12T00:00:00Z", 44 | "index": 2, 45 | "is_used": 1, 46 | "category": "2", 47 | "part": "2", 48 | "name": "\u70b8\u836f", 49 | "count": 50 50 | } 51 | }, 52 | { 53 | "model": "safe.dangerused", 54 | "pk": "1", 55 | "fields": { 56 | "create_time": "2019-03-02T00:00:00Z", 57 | "update_time": "2019-03-12T00:00:00Z", 58 | "danger": "1", 59 | "count": 10, 60 | "manager": "1", 61 | "user": "2", 62 | "is_need_back": true, 63 | "is_back": true, 64 | "start_time": "2019-03-02T00:00:00Z", 65 | "end_time": "2019-03-12T00:00:00Z" 66 | } 67 | }, 68 | { 69 | "model": "safe.dangerused", 70 | "pk": "2", 71 | "fields": { 72 | "create_time": "2019-03-05T00:00:00Z", 73 | "update_time": "2019-03-11T00:00:00Z", 74 | "danger": "2", 75 | "count": 15, 76 | "manager": "2", 77 | "user": "1", 78 | "is_need_back": true, 79 | "is_back": true, 80 | "start_time": "2019-03-05T00:00:00Z", 81 | "end_time": "2019-03-11T00:00:00Z" 82 | } 83 | } 84 | ] -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/company_viewset.py: -------------------------------------------------------------------------------- 1 | from lib import model_viewset 2 | from rest_framework import permissions 3 | import django_filters as filters 4 | from django_filters.rest_framework import DjangoFilterBackend 5 | from rest_framework.filters import OrderingFilter 6 | 7 | from auth_system.models import Company 8 | from lib.user_permission import SelfPermission 9 | 10 | from staff.serializers import CompanySerializer 11 | from rest_framework_tracking.mixins import LoggingMixin 12 | from rest_framework.decorators import action 13 | from rest_framework.response import Response 14 | import numpy as np 15 | import pandas as pd 16 | import os 17 | 18 | 19 | class CompanyFilter(filters.FilterSet): 20 | '''可以根据名称等来过滤''' 21 | 22 | class Meta: 23 | model = Company 24 | fields = ["name"] 25 | 26 | 27 | class CompanyViewSet(model_viewset.ModelViewSet): 28 | """ 29 | A simple ViewSet for viewing and editing accounts. 30 | """ 31 | queryset = Company.objects.filter(is_used=1).all() 32 | serializer_class = CompanySerializer 33 | filterset_class = CompanyFilter 34 | filter_backends = [OrderingFilter, DjangoFilterBackend] 35 | # permission_classes = [SelfPermission] 36 | # permission_classes = [permissions.IsAuthenticatedOrReadOnly] 37 | 38 | @action(methods=["GET"], detail=False) 39 | def company_out(self, request): 40 | id_str = request.query_params.get("list") 41 | if not id_str: 42 | return Response({"msg": "请勾选导出的内容"}, status=200) 43 | else: 44 | id_list = id_str.split(",") 45 | 46 | value = self.queryset.filter(id__in=id_list).values("name", "boss_name", "phone_num", "company_address") 47 | 48 | array = [list(array.values()) for array in value] 49 | 50 | excel = pd.DataFrame(np.array(array), columns=["公司名称", "联系人", "联系电话", "联系地址"]) 51 | 52 | filepath = "media/xlsx/company.xlsx" 53 | if os.path.exists(filepath): 54 | os.remove(filepath) 55 | excel.to_excel(filepath) 56 | path = request.META.get('SERVER_PROTOCOL').split("/")[0].lower() + "://" + request.META.get( 57 | 'HTTP_HOST') + "/" + filepath 58 | return Response({"path": path}, status=200) 59 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/departmentwork_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | import django_filters as filters 3 | from django_filters.rest_framework import DjangoFilterBackend 4 | from rest_framework.filters import OrderingFilter 5 | from rest_framework.decorators import action 6 | from rest_framework.response import Response 7 | from staff.models import Department 8 | from ..serializers.departmentwork_serializer import DepartmentworkSerializer 9 | import numpy as np 10 | import pandas as pd 11 | import os 12 | 13 | class DepartmentWorkFilter(filters.FilterSet): 14 | '''根据时间和部门查询出勤率''' 15 | # TODO 增加part_id 16 | class Meta: 17 | model = Department 18 | fields = ["department", "id", "part_id"] 19 | 20 | 21 | 22 | class DepartmentworkViewset(ModelViewSet): 23 | """部门考勤信息""" 24 | queryset = Department.objects.all() 25 | serializer_class = DepartmentworkSerializer 26 | filterset_class = DepartmentWorkFilter 27 | # filter_backends = [OrderingFilter, DjangoFilterBackend] 28 | 29 | 30 | @action(methods=["GET"], detail=False) 31 | def department_work_out(self, request): 32 | id_str = request.query_params.get("list") 33 | if not id_str: 34 | return Response({"msg": "请勾选导出的内容"}, status=200) 35 | else: 36 | id_list = id_str.split(",") 37 | queryset = self.filter_queryset(self.get_queryset()) 38 | serializer = self.get_serializer(queryset, many=True) 39 | array = [] 40 | for all_id in serializer.data: 41 | id = all_id.get("id") 42 | if str(id) in id_list: 43 | list = [all_id["time"], all_id["department"], all_id["fact"], all_id["real"], all_id["rate"]] 44 | array.append(list) 45 | excel = pd.DataFrame(np.array(array), columns=["日期", "部门", "应到人数", "实到人数", "出勤率"]) 46 | filepath = "media/xlsx/department.xlsx" 47 | if os.path.exists(filepath): 48 | os.remove(filepath) 49 | excel.to_excel(filepath) 50 | path = request.META.get('SERVER_PROTOCOL').split("/")[0].lower() + "://" + request.META.get( 51 | 'HTTP_HOST') + "/" + filepath 52 | return Response({"path": path}, status=200) 53 | -------------------------------------------------------------------------------- /ruidun_system/staff/viewsets/part_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters as filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from lib import model_viewset 5 | from ..models import Part 6 | from ..serializers.part_serializer import PartSerializer 7 | from rest_framework.decorators import action 8 | from rest_framework.response import Response 9 | import numpy as np 10 | import pandas as pd 11 | import os 12 | 13 | 14 | class PartFilter(filters.FilterSet): 15 | '''可以根据工区名称, 项目名称,公司名称等来过滤''' 16 | 17 | project_name = filters.CharFilter(field_name="project_id", lookup_expr="name") 18 | company_name = filters.CharFilter(field_name="project_id", lookup_expr="name") 19 | 20 | class Meta: 21 | model = Part 22 | fields = ["name", "project_name", "company_name"] 23 | 24 | 25 | class PartViewset(model_viewset.ModelViewSet): 26 | """工区模型""" 27 | queryset = Part.objects.filter(is_used=1).all() 28 | serializer_class = PartSerializer 29 | filterset_class = PartFilter 30 | filter_backends = [OrderingFilter, DjangoFilterBackend] 31 | # ordering_fields = () 32 | 33 | @action(methods=["GET"], detail=False) 34 | def part_out(self, request): 35 | id_str = request.query_params.get("list") 36 | if not id_str: 37 | return Response({"msg": "请勾选导出的内容"}, status=200) 38 | else: 39 | id_list = id_str.split(",") 40 | 41 | value = self.queryset.filter(id__in=id_list).values("name", "project_id__name", 42 | "project_id__company_id__name", "manager", 43 | "manager_phone") 44 | 45 | array = [list(array.values()) for array in value] 46 | 47 | excel = pd.DataFrame(np.array(array), columns=["工区信息", "所属项目", "所属公司", "负责人", "负责人电话"]) 48 | 49 | filepath = "media/xlsx/part.xlsx" 50 | if os.path.exists(filepath): 51 | os.remove(filepath) 52 | excel.to_excel(filepath) 53 | path = request.META.get('SERVER_PROTOCOL').split("/")[0].lower() + "://" + request.META.get( 54 | 'HTTP_HOST') + "/" + filepath 55 | return Response({"path": path}, status=200) 56 | -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/staff_pass_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django_filters.rest_framework import DjangoFilterBackend 3 | from rest_framework.filters import OrderingFilter 4 | from rest_framework import viewsets 5 | 6 | from auth_system.models import Company 7 | from internet_setting.models import StaffPass 8 | from internet_setting.serializers.staff_pass_serializer import StaffPassSerializer 9 | 10 | class StaffPassFilter(django_filters.FilterSet): 11 | # time = django_filters.DateTimeFilter() 12 | time__gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 13 | time__lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 14 | # company = django_filters.ModelChoiceFilter(to_field_name="name", queryset=Company.objects.all()) 15 | staff = django_filters.CharFilter(field_name='staff_id', lookup_expr='name') 16 | class Meta: 17 | model = StaffPass 18 | fields = ["time__gt", 'time__lt', 'status', 'staff'] 19 | 20 | 21 | class StaffPassViewSet(viewsets.ReadOnlyModelViewSet): 22 | """ 23 | A simple ViewSet for viewing and editing accounts. 24 | """ 25 | queryset = StaffPass.objects.all() 26 | serializer_class = StaffPassSerializer 27 | # filter_fields = { 28 | # 'time': ['gt', 'lt'] 29 | # } 30 | filterset_class = StaffPassFilter 31 | # filter_fields = ('status', 'staff_id') 32 | filter_backends = [OrderingFilter, DjangoFilterBackend] # 为了兼容排序和过滤能同时有效 33 | ordering_fields = ('status', 'time') 34 | 35 | 36 | # permission_classes = [SelfPermission] 37 | 38 | # def get_queryset(self): 39 | # company_id = self.request.query_params.get("company_id", None) 40 | # staff = self.request.query_params.get("staff", None) 41 | # status = self.request.query_params.get("status", None) 42 | # start_time = self.request.query_params.get('start_time', None) 43 | # end_time = self.request.query_params.get('end_time', None) 44 | # conditions = {} # 查询的条件 45 | # 46 | # if staff: 47 | # conditions["staff"] = staff 48 | # if status: 49 | # conditions["status"] = status 50 | # if start_time: 51 | # conditions['time__gt'] = start_time 52 | # if end_time: 53 | # conditions['time__lt'] = end_time 54 | # 55 | # 56 | # queryset = StaffPass.objects.filter(**conditions).all() 57 | # return queryset -------------------------------------------------------------------------------- /ruidun_system/internet_setting/viewsets/voice_server_viewset.py: -------------------------------------------------------------------------------- 1 | import os 2 | import re 3 | 4 | from rest_framework import viewsets, status 5 | from rest_framework.decorators import action 6 | from rest_framework.filters import OrderingFilter 7 | from rest_framework.response import Response 8 | 9 | from client.ipvoice import Client 10 | from internet_setting.models import VoiceServer 11 | from internet_setting.serializers.voice_server_serializer import VoiceServerSerializer 12 | from lib import model_viewset 13 | 14 | 15 | class VoiceServerViewSet(model_viewset.ModelViewSet): 16 | """ 17 | A simple ViewSet for viewing and editing accounts. 18 | """ 19 | queryset = VoiceServer.objects.all() 20 | serializer_class = VoiceServerSerializer 21 | filter_backends = [OrderingFilter] 22 | # ordering_fields = ('index',) 23 | 24 | # @action(methods=['POST'], detail=True) 25 | # def voice(self, request, pk): 26 | # "指定音响播放录音接口" 27 | # obj = self.get_object() 28 | # # print(obj.ip) 29 | # # print(obj.port) 30 | # voice_path = request.data.get('voice_path') 31 | # snlist = request.data.get('snlist') # 多个序列号之间用逗号隔开 32 | # # print(voice_path, snlist) 33 | # # 调用硬件接口: 34 | # client = Client(ip=obj.ip, port=obj.port, voiceFilePath=voice_path, snlist=snlist) 35 | # try: 36 | # result = client.send() 37 | # return Response(data=result, status=status.HTTP_200_OK) 38 | # except Exception: 39 | # return Response(data={"message": "硬件连接异常"}, status=status.HTTP_200_OK) 40 | 41 | @action(methods=['POST'], detail=True) 42 | def voice(self, request, pk): 43 | "指定音响播放录音接口" 44 | obj = self.get_object() 45 | # print(obj.ip) 46 | # print(obj.port) 47 | voice_path = request.data.get('voice_path') 48 | paths = re.search(r"m.*", voice_path).group() 49 | # voice_path = os.path.realpath(voice_path.split("8001/")[-1]) 50 | voice_path = os.path.realpath(paths) 51 | snlist = request.data.get('snlist') # 多个序列号之间用逗号隔开 52 | # print(voice_path, snlist) 53 | # 调用硬件接口: 54 | client = Client(ip=obj.ip, port=obj.port, voiceFilePath=voice_path, snlist=snlist) 55 | try: 56 | result = client.send() 57 | return Response(data=result, status=status.HTTP_200_OK) 58 | except Exception: 59 | return Response(data={"message": "音响设备连接异常"}, status=status.HTTP_200_OK) -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/car_pass_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from internet_setting.models import CarPass 6 | 7 | 8 | # class CarPassSerializer(serializers.ModelSerializer): 9 | # 10 | # name = serializers.SerializerMethodField() 11 | # 12 | # class Meta: 13 | # model = CarPass 14 | # fields = '__all__' 15 | # extra_kwargs = { 16 | # "id": {"read_only": True} 17 | # } 18 | # 19 | # def get_name(self, obj): 20 | # return obj.car.car_owner 21 | # 22 | # def create(self, validated_data): 23 | # pk = uuid.uuid4() 24 | # return CarPass.objects.create(pk=pk, **validated_data) 25 | # 26 | # def update(self, instance, validated_data): 27 | # instance.status = validated_data.get("status", instance.status) 28 | # instance.car = validated_data.get("car", instance.car) 29 | # instance.is_used = validated_data.get("is_used", instance.is_used) 30 | # instance.code = validated_data.get("code", instance.code) 31 | # 32 | # instance.save() 33 | # return instance 34 | from work_area.models import CarInfo 35 | 36 | 37 | class CarPassSerializer(serializers.ModelSerializer): 38 | 39 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 40 | part_id = serializers.CharField(allow_null=True) 41 | 42 | class Meta: 43 | model = CarInfo 44 | fields = '__all__' 45 | extra_kwargs = { 46 | "id": {"read_only": True} 47 | } 48 | 49 | 50 | def create(self, validated_data): 51 | pk = uuid.uuid4() 52 | return CarInfo.objects.create(pk=pk, **validated_data) 53 | 54 | # def update(self, instance, validated_data): 55 | # instance.status = validated_data.get("status", instance.status) 56 | # instance.car = validated_data.get("car", instance.car) 57 | # instance.is_used = validated_data.get("is_used", instance.is_used) 58 | # instance.code = validated_data.get("code", instance.code) 59 | # 60 | # instance.save() 61 | # return instance 62 | 63 | def update(self, instance, validated_data): 64 | instance.cphm = validated_data.get("cphm", instance.cphm) 65 | instance.clys = validated_data.get("clys", instance.clys) 66 | instance.clxh = validated_data.get("clxh", instance.clxh) 67 | instance.part_id = validated_data.get("part_id", instance.part_id) 68 | 69 | instance.save() 70 | return instance -------------------------------------------------------------------------------- /ruidun_system/work_area/serializers/staffrecord_serializer.py: -------------------------------------------------------------------------------- 1 | from rest_framework import serializers 2 | 3 | from auth_system.models import Part 4 | from internet_setting.models import StaffPass 5 | from ..models import StaffBreak, StaffRecord 6 | from staff.models import Staff 7 | 8 | 9 | class StaffSerializer(serializers.ModelSerializer): 10 | """人员序列化器""" 11 | 12 | code = serializers.SerializerMethodField() 13 | # part = serializers.SerializerMethodField() 14 | 15 | class Meta: 16 | model = Staff 17 | fields = ('code', 'id', 'name', 'phone') 18 | 19 | def get_code(self, obj): 20 | # 人员通行证卡号 21 | request = self.context['request'] 22 | part_id = request.query_params.get('part_id') 23 | # TODO 等待传入part_id(下方) 24 | staffpass_set = obj.staffpass_set.filter(part_id=1) 25 | 26 | if not staffpass_set: 27 | return None 28 | 29 | return (staffpass_set[0].code) 30 | 31 | # def get_part(self, obj): 32 | # # 判断人员是否属于当前工区 33 | # request = self.context['request'] 34 | # part_id = request.query_params.get('part_id') 35 | # # TODO 等待传入part_id(下方) 36 | # 37 | # if not part_id: 38 | # raise serializers.ValidationError("参数不足") 39 | # 40 | # if not Part.objects.filter(id=part_id): 41 | # raise serializers.ValidationError("工区不存在") 42 | # 43 | # if obj.part_id != part_id: 44 | # # 判断人员是否属于当前工区 45 | # part_name = Part.objects.filter(id=obj.part_id)[0].name 46 | # return part_name 47 | 48 | 49 | # class StaffBreakSerializer (serializers.ModelSerializer): 50 | # """人员道闸序列化器""" 51 | # 52 | # class Meta: 53 | # model = StaffBreak 54 | # fields = ('name',) 55 | # # extra_kwargs = { 56 | # # 'name': {'label': '道闸'} 57 | # # } 58 | 59 | 60 | # class StffPassSerializer(serializers.ModelSerializer): 61 | # """人员通行证序列化器""" 62 | # 63 | # class Meta: 64 | # model = StaffPass 65 | # fields = ('code', ) 66 | 67 | 68 | class StaffRecordSerializer(serializers.ModelSerializer): 69 | """人员通行记录序列化器""" 70 | 71 | # staff = StaffSerializer(read_only=True) 72 | # staff_break = serializers.SlugRelatedField(label='道闸', read_only=True, slug_field='name') 73 | 74 | class Meta: 75 | model = StaffRecord 76 | # fields = ('id', 'staff', 'staff_break', 'in_out', 'time') 77 | fields = ('id', 'sysid', 'zone_name', 'device_name', 'names', 'card_number', 'inouts', 'time', 'group_number') -------------------------------------------------------------------------------- /ruidun_system/base_system/urls.py: -------------------------------------------------------------------------------- 1 | """base_system URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/2.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.shortcuts import redirect 18 | from django.urls import include, path 19 | from django.conf import settings 20 | from django.conf.urls.static import static 21 | from django.views.generic import TemplateView 22 | 23 | from . import settings 24 | from . import views 25 | from rest_framework_jwt.views import obtain_jwt_token 26 | from rest_framework_jwt.views import refresh_jwt_token 27 | from rest_framework_jwt.views import verify_jwt_token 28 | 29 | def red(request): 30 | # 默认进去主页 31 | return redirect("static/index.html") 32 | 33 | def demo(request): 34 | # 海康web 35 | return redirect("static/demo/index.html") 36 | 37 | urlpatterns = [ 38 | path('', red), 39 | path('haikang', demo), 40 | # path('^$', TemplateView.as_view(template_name="index.html")), 41 | path('admin/', admin.site.urls), 42 | 43 | path('auth-jwt/', obtain_jwt_token), 44 | path('auth-jwt-refresh/', refresh_jwt_token), 45 | path('auth-jwt-verify/', verify_jwt_token), 46 | # path('accounts/', include('django.contrib.auth.urls')), 47 | # path('crud/', include('crudbuilder.urls')), 48 | 49 | # path('home', views.home, name='home'), 50 | path('staff/', include('staff.urls'), name='staff'), 51 | path('work_area/', include('work_area.urls'), name='work_area'), 52 | # path('bridge_and_tunnel/', include('bridge_and_tunnel.urls'), name='bridge_and_tunnel'), 53 | path('equipment/', include('equipment.urls'), name='equipment'), 54 | path('safe/', include('safe.urls'), name='safe'), 55 | # path('internet_operate/', include('internet_operate.urls'), name='internet_operate'), 56 | path('internet_setting/', include('internet_setting.urls'), name='internet_setting'), 57 | path('system_manage/', include('system_manage.urls'), name='system_manage'), 58 | ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) -------------------------------------------------------------------------------- /ruidun_system/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/django 3 | # Edit at https://www.gitignore.io/?templates=django 4 | 5 | ### Django ### 6 | *.log 7 | *.pot 8 | *.pyc 9 | __pycache__/ 10 | local_settings.py 11 | db.sqlite3 12 | *static/ 13 | *media/ 14 | 15 | # If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ 16 | # in your Git repository. Update and uncomment the following line accordingly. 17 | # /staticfiles/ 18 | 19 | ### Django.Python Stack ### 20 | # Byte-compiled / optimized / DLL files 21 | *.py[cod] 22 | *$py.class 23 | 24 | # C extensions 25 | *.so 26 | 27 | # Distribution / packaging 28 | .Python 29 | build/ 30 | develop-eggs/ 31 | dist/ 32 | downloads/ 33 | eggs/ 34 | .eggs/ 35 | lib64/ 36 | parts/ 37 | sdist/ 38 | var/ 39 | wheels/ 40 | pip-wheel-metadata/ 41 | share/python-wheels/ 42 | *.egg-info/ 43 | .installed.cfg 44 | *.egg 45 | MANIFEST 46 | 47 | # PyInstaller 48 | # Usually these files are written by a python script from a template 49 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 50 | *.manifest 51 | *.spec 52 | 53 | # Installer logs 54 | pip-log.txt 55 | pip-delete-this-directory.txt 56 | 57 | # Unit test / coverage reports 58 | htmlcov/ 59 | .tox/ 60 | .nox/ 61 | .coverage 62 | .coverage.* 63 | .cache 64 | nosetests.xml 65 | coverage.xml 66 | *.cover 67 | .hypothesis/ 68 | .pytest_cache/ 69 | 70 | # Translations 71 | *.mo 72 | 73 | # Django stuff: 74 | 75 | # Flask stuff: 76 | instance/ 77 | .webassets-cache 78 | 79 | # Scrapy stuff: 80 | .scrapy 81 | 82 | # Sphinx documentation 83 | docs/_build/ 84 | 85 | # PyBuilder 86 | target/ 87 | 88 | # Jupyter Notebook 89 | .ipynb_checkpoints 90 | 91 | # IPython 92 | profile_default/ 93 | ipython_config.py 94 | 95 | # pyenv 96 | .python-version 97 | 98 | # celery beat schedule file 99 | celerybeat-schedule 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | # End of https://www.gitignore.io/api/django 132 | 133 | migrations/ 134 | -------------------------------------------------------------------------------- /ruidun_system/equipment/viewsets/equipmentupkeep_viewset.py: -------------------------------------------------------------------------------- 1 | from lib.model_viewset import ModelViewSet 2 | import django_filters as filters 3 | from django_filters.rest_framework import DjangoFilterBackend 4 | from rest_framework.filters import OrderingFilter 5 | from ..models import EquipmentUpkeep 6 | from ..serializers.equipmentupkeep_serializer import EquipmentUpkeepSerializer 7 | 8 | 9 | class EquipmentupkeepFilter(filters.FilterSet): 10 | manager_name = filters.CharFilter(field_name="manager_id", lookup_expr="name") 11 | name = filters.CharFilter(field_name="equipment_id", lookup_expr="name") 12 | time_gt = filters.DateTimeFilter(field_name="time", lookup_expr='gte') 13 | time_lt = filters.DateTimeFilter(field_name="time", lookup_expr='lte') 14 | company_id = filters.CharFilter(field_name="equipment_id", lookup_expr="company_id") 15 | 16 | class Meta: 17 | model = EquipmentUpkeep 18 | fields = ["manager_name", "time_gt", "time_lt", "upkeep_man", "name", "company_id", "equipment_id"] 19 | 20 | 21 | """保养记录搜索查询""" 22 | class EquipmentUpkeepViewSet(ModelViewSet): 23 | 24 | queryset = EquipmentUpkeep.objects.all() 25 | serializer_class = EquipmentUpkeepSerializer 26 | filterset_class = EquipmentupkeepFilter 27 | filter_backends = [OrderingFilter, DjangoFilterBackend] 28 | ordering_fields = ("time",) 29 | 30 | # def get_queryset(self): 31 | # 32 | # query_dict = {} 33 | # equipment = self.request.query_params.get("equipment", None) 34 | # manager = self.request.query_params.get("manager", None) 35 | # upkeep_man = self.request.query_params.get("upkeep_man", None) 36 | # time = self.request.query_params.get("time", None) 37 | # if equipment: 38 | # if EquipmentInfo.objects.filter(name=equipment).count() == 0: 39 | # return [] 40 | # query_dict["equipment_id"] = EquipmentInfo.objects.get(name=equipment).engineering_car_id 41 | # if manager: 42 | # if Staff.objects.filter(name=manager).count() == 0: 43 | # return [] 44 | # query_dict["manager_id"] = Staff.objects.get(name=manager).staff_id 45 | # if upkeep_man: 46 | # if EquipmentUpkeep.objects.filter(upkeep_man=upkeep_man).count() == 0: 47 | # return [] 48 | # query_dict["upkeep_man"] = upkeep_man 49 | # if time: 50 | # if EquipmentUpkeep.objects.filter(time=time).count() == 0: 51 | # return [] 52 | # query_dict["time"] = time 53 | # 54 | # queryset = EquipmentUpkeep.objects.filter(**query_dict) 55 | # 56 | # return queryset -------------------------------------------------------------------------------- /ruidun_system/internet_setting/serializers/led_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | 5 | from auth_system.models import Part 6 | from internet_setting.models import LEDInfo 7 | 8 | 9 | class LEDInfoSerializer(serializers.ModelSerializer): 10 | 11 | part = serializers.SlugRelatedField(slug_field='name', read_only=True) 12 | part_id = serializers.CharField(allow_null=True, required=False) 13 | 14 | class Meta: 15 | model = LEDInfo 16 | fields = "__all__" 17 | extra_kwargs = { 18 | "id":{"read_only": True}, 19 | "sysid":{"read_only": True}, 20 | "part_id":{"read_only": True}, 21 | "note":{"required": False}, 22 | "area_name":{"required": False} 23 | } 24 | 25 | # 关于外键的需要单独验证,因为外键字段指定两个序列化字段会出现问题 26 | 27 | def validate_part_id(self, value): 28 | if Part.objects.filter(pk=value).count() == 0: 29 | raise serializers.ValidationError("无效的值,关联表中不存在这条记录") 30 | return value 31 | 32 | def create(self, validated_data): 33 | validated_data["id"] = uuid.uuid4() # 添加一个唯一的UUID为主键 34 | return LEDInfo.objects.create(**validated_data) 35 | 36 | def update(self, instance, validated_data): 37 | # 因为有可能没有传过来,所以用字典.get() 方法 38 | instance.time = validated_data.get("time", instance.bought_time) 39 | instance.factory = validated_data.get("factory", instance.factory) 40 | instance.model= validated_data.get("model", instance.model) 41 | instance.ip = validated_data.get("ip", instance.ip) 42 | instance.port = validated_data.get("port", instance.port) 43 | instance.part_id = validated_data.get("part_id", instance.part_id) 44 | instance.is_used = validated_data.get("is_used", instance.is_used) 45 | instance.status = validated_data.get("status", instance.status) 46 | instance.note = validated_data.get("note", instance.note) 47 | instance.x = validated_data.get("x", instance.x) 48 | instance.y = validated_data.get("y", instance.y) 49 | instance.sysid = validated_data.get("sysid", instance.sysid) 50 | instance.area_name = validated_data.get("area_name", instance.area_name) 51 | instance.nScreenNo = validated_data.get("nScreenNo", instance.nScreenNo) 52 | instance.pScreenName = validated_data.get("pScreenName", instance.pScreenName) 53 | instance.nWidth = validated_data.get("nWidth", instance.nWidth) 54 | instance.nHeight = validated_data.get("nHeight", instance.nHeight) 55 | instance.nScreenType = validated_data.get("nScreenType", instance.nScreenType) 56 | instance.nPixelMode = validated_data.get("nPixelMode", instance.nPixelMode) 57 | 58 | instance.save() 59 | return instance 60 | 61 | 62 | -------------------------------------------------------------------------------- /ruidun_system/staff/serializers/usermouthwork_detail_serialzer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | import calendar 3 | from rest_framework import serializers 4 | 5 | from staff.models import UserWork, Staff 6 | 7 | import datetime 8 | 9 | now_time =datetime.datetime.now().strftime("%Y-%m-%d") 10 | 11 | 12 | class UserMouthWorkDetailSerializer(serializers.ModelSerializer): 13 | department = serializers.SlugRelatedField(slug_field='department', read_only=True) 14 | department_id = serializers.CharField(allow_null=True, required=False) 15 | daywork = serializers.SerializerMethodField() 16 | 17 | class Meta: 18 | model = Staff 19 | fields = ('id', 'name', 'department', "department_id", 'daywork') 20 | extra_kwargs = { 21 | "id": {"required": False} 22 | } 23 | 24 | def get_daywork(self, obj): 25 | mouth = self.context["request"].query_params.get('mouth') 26 | if mouth: 27 | year, month = [int(a) for a in mouth.split("-")] 28 | # 得出该年这个月份的第一天是周几和共多少天(monthrange) 29 | weekday, monthrange = calendar.monthrange(year, month) 30 | time_gt = datetime.date(year=year, month=month, day=1) 31 | time_lt = datetime.date(year=year, month=month, day=monthrange) 32 | work = UserWork.objects.filter(staff_id=obj.id, time__gte=time_gt, time__lte=time_lt).values("id", "time", "work_time", "detail",'enter_time', 'leave_time').order_by("time") 33 | for i in work: 34 | if i["work_time"] >= 720000: 35 | i["work_time"] = "正常" 36 | elif 0 < i["work_time"] < 720000: 37 | i["work_time"] = "缺工" 38 | else: 39 | i["work_time"] = "旷工" 40 | return work 41 | 42 | def get_department(self, obj): 43 | return obj.staff.department.department 44 | 45 | def get_department_id(self, obj): 46 | return obj.staff.department.id 47 | 48 | def validate_staff_id(self, value): 49 | if Staff.objects.filter(pk=value).count() == 0: 50 | raise serializers.ValidationError("无效的值") 51 | return value 52 | 53 | def create(self, validated_data): 54 | validated_data["id"] = uuid.uuid4() # 添加一个唯一的UUID为主键 55 | return UserWork.objects.create(**validated_data) 56 | 57 | def update(self, instance, validated_data): 58 | # 因为有可能没有传过来,所以用字典.get() 方法 59 | instance.time = validated_data.get("time", instance.time) 60 | instance.work_time = validated_data.get("work_time", instance.work_time) 61 | instance.detail = validated_data.get("detail", instance.detail) 62 | instance.enter_time = validated_data.get("enter_time", instance.enter_time) 63 | instance.leave_time = validated_data.get("leave_time", instance.leave_time) 64 | instance.save() 65 | return instance -------------------------------------------------------------------------------- /ruidun_system/work_area/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path, re_path 2 | 3 | from work_area.viewsets.staff_location import StaffLocationViewSet 4 | from .viewsets.open_carbreak_view import OpenCarbreak 5 | from .viewsets.open_staffbreak_view import OpenStaffbreak 6 | # from .viewsets.staffstatus_viewset import StaffStatusAPIView 7 | 8 | urlpatterns = [ 9 | # path('staffstatus/', StaffStatusAPIView.as_view()), # 工区人员状态 10 | # re_path(r'staffstatus/(?P\d+)/$', StaffStatusAPIView.as_view()), 11 | path("open_carbreak/", OpenCarbreak.as_view()), # 开启车辆道闸 12 | path("open_staffbreak/", OpenStaffbreak.as_view()) # 开启人员道闸 13 | ] 14 | 15 | from rest_framework import routers 16 | from .viewsets.carrecord_viewset import CarRecordViewset 17 | from .viewsets.carbreak_viewset import CarBreakViewset 18 | from .viewsets.staffrecord_viewset import StaffRecordViewset 19 | from .viewsets.staffbreak_viewset import StaffBreakViewset 20 | from .viewsets.team_viewset import TeamViewset 21 | from .viewsets.staffstatus_viewset import StaffStatusViewset 22 | from .viewsets.deviceinfo_viewset import DeviceInfoViewset 23 | from .viewsets.department_viewset import DepartmentViewset 24 | 25 | # 车辆通行记录 26 | router = routers.DefaultRouter() 27 | router.register('carrecords', CarRecordViewset, base_name='carrecords' ) 28 | 29 | urlpatterns += router.urls 30 | 31 | 32 | # 车辆道闸 33 | router = routers.DefaultRouter() 34 | router.register('carbreaks', CarBreakViewset, base_name='carbreaks' ) 35 | 36 | urlpatterns += router.urls 37 | 38 | 39 | # 人员通行记录 40 | router = routers.DefaultRouter() 41 | router.register('staffrecords', StaffRecordViewset, base_name='staffrecords' ) 42 | 43 | urlpatterns += router.urls 44 | 45 | 46 | # 人员道闸 47 | router = routers.DefaultRouter() 48 | router.register('staffbreaks', StaffBreakViewset, base_name='staffbreaks' ) 49 | 50 | urlpatterns += router.urls 51 | 52 | 53 | # 工区下的施工班组(加班组下的第一组人员信息) 54 | router = routers.DefaultRouter() 55 | router.register('teams', TeamViewset, base_name='teams' ) 56 | 57 | urlpatterns += router.urls 58 | 59 | 60 | # 工区人员状态(当前工区施工班组下的人员) 61 | router = routers.DefaultRouter() 62 | router.register('staffstatus', StaffStatusViewset, base_name='staffstatus' ) 63 | 64 | urlpatterns += router.urls 65 | 66 | # 67 | # # 工区设备信息 68 | # router = routers.DefaultRouter() 69 | # router.register('deviceinfos', DeviceInfoViewset, base_name='deviceinfos' ) 70 | # 71 | # urlpatterns += router.urls 72 | 73 | 74 | # 工区下的部门/班组 75 | router = routers.DefaultRouter() 76 | router.register('departments', DepartmentViewset, base_name='departments' ) 77 | 78 | urlpatterns += router.urls 79 | 80 | 81 | # 人员定位信息 82 | router = routers.DefaultRouter() 83 | router.register('stafflocations', StaffLocationViewSet, base_name='stafflocations' ) 84 | 85 | urlpatterns += router.urls 86 | 87 | 88 | -------------------------------------------------------------------------------- /ruidun_system/work_area/fixtures/car_record.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "model": "work_area.carinfo", 4 | "pk": "\u4eacAD8888", 5 | "fields": { 6 | "car_owner": "\u674e\u98de\u817e", 7 | "phone_number": "18536754205" 8 | } 9 | }, 10 | { 11 | "model": "work_area.carinfo", 12 | "pk": "\u8c6bAMZ000", 13 | "fields": { 14 | "car_owner": "\u9ad8\u98de", 15 | "phone_number": "18626354876" 16 | } 17 | }, 18 | { 19 | "model": "work_area.carinfo", 20 | "pk": "\u8c6bAZ6666", 21 | "fields": { 22 | "car_owner": "\u5f20\u4e09", 23 | "phone_number": "18626354888" 24 | } 25 | }, 26 | { 27 | "model": "work_area.carbreak", 28 | "pk": "1", 29 | "fields": { 30 | "create_time": "2019-03-10T00:00:00Z", 31 | "update_time": "2019-03-13T00:00:00Z", 32 | "index": 1, 33 | "is_used": 1, 34 | "name": "\u897f\u4e00\u9053\u95f8" 35 | } 36 | }, 37 | { 38 | "model": "work_area.carbreak", 39 | "pk": "2", 40 | "fields": { 41 | "create_time": "2019-03-10T00:00:00Z", 42 | "update_time": "2019-03-13T00:00:00Z", 43 | "index": 1, 44 | "is_used": 1, 45 | "name": "\u4e1c\u4e00\u9053\u95f8" 46 | } 47 | }, 48 | { 49 | "model": "work_area.carbreak", 50 | "pk": "3", 51 | "fields": { 52 | "create_time": "2019-03-10T00:00:00Z", 53 | "update_time": "2019-03-13T00:00:00Z", 54 | "index": 1, 55 | "is_used": 1, 56 | "name": "\u5357\u4e00\u9053\u95f8" 57 | } 58 | }, 59 | { 60 | "model": "work_area.carrecord", 61 | "pk": "1", 62 | "fields": { 63 | "car": "\u4eacAD8888", 64 | "car_break": "1", 65 | "in_out": true, 66 | "time": "2019-03-11T00:00:00Z" 67 | } 68 | }, 69 | { 70 | "model": "work_area.carrecord", 71 | "pk": "2", 72 | "fields": { 73 | "car": "\u4eacAD8888", 74 | "car_break": "2", 75 | "in_out": false, 76 | "time": "2019-03-12T12:00:00Z" 77 | } 78 | }, 79 | { 80 | "model": "work_area.carrecord", 81 | "pk": "3", 82 | "fields": { 83 | "car": "\u8c6bAMZ000", 84 | "car_break": "3", 85 | "in_out": true, 86 | "time": "2019-03-12T00:00:00Z" 87 | } 88 | }, 89 | { 90 | "model": "work_area.carrecord", 91 | "pk": "4", 92 | "fields": { 93 | "car": "\u8c6bAMZ000", 94 | "car_break": "1", 95 | "in_out": false, 96 | "time": "2019-03-12T14:22:00Z" 97 | } 98 | }, 99 | { 100 | "model": "work_area.carrecord", 101 | "pk": "5", 102 | "fields": { 103 | "car": "\u8c6bAZ6666", 104 | "car_break": "2", 105 | "in_out": true, 106 | "time": "2019-03-13T00:00:00Z" 107 | } 108 | } 109 | ] -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/staffrecord_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from lib.model_viewset import ModelViewSet 3 | from rest_framework.filters import OrderingFilter 4 | from django_filters import rest_framework as filters 5 | 6 | from ..models import StaffRecord 7 | from staff.models import Staff 8 | from ..serializers.staffrecord_serializer import StaffRecordSerializer 9 | # 自定义 10 | from rest_framework.decorators import action 11 | from rest_framework.response import Response 12 | from rest_framework import status 13 | import numpy as np 14 | import pandas as pd 15 | import os 16 | 17 | 18 | class StaffRecordFilter(django_filters.FilterSet): 19 | # 人员通行记录过滤器 20 | time = django_filters.DateTimeFilter() 21 | time_gt = django_filters.DateTimeFilter(field_name='time', lookup_expr='gt') 22 | time_lt = django_filters.DateTimeFilter(field_name='time', lookup_expr='lt') 23 | # staff = django_filters.CharFilter(field_name='staff_id', lookup_expr='name') 24 | 25 | class Meta: 26 | model = StaffRecord 27 | # fields = ['time_gt', 'time_lt', 'staff', 'staff_break'] 28 | fields = ['time_gt', 'time_lt', 'device_name', 'names', 'part_id'] 29 | 30 | 31 | class StaffRecordViewset(ModelViewSet): 32 | """人员通行记录""" 33 | 34 | # TODO 等待传入工区id 35 | sysid = 'SYS0101' 36 | queryset = StaffRecord.objects.all().order_by('-time') 37 | serializer_class = StaffRecordSerializer 38 | filterset_class = StaffRecordFilter 39 | filter_backends = (OrderingFilter, filters.DjangoFilterBackend,) 40 | ordering_fields = ('time',) 41 | 42 | # 导出 43 | @action(methods=["GET"], detail=False) 44 | def staff_recode_out(self, request): 45 | id_str = request.query_params.get("list") 46 | if not id_str: 47 | return Response({"msg": "请勾选导出的内容"}, status=200) 48 | else: 49 | id_list = id_str.split(",") 50 | value = self.queryset.filter(id__in=id_list).values("card_number","names","device_name","inouts","time") 51 | array = [list(array.values()) for array in value] 52 | print(array) 53 | for i in range(len(array)): 54 | array[i][4] = array[i][4].strftime("%Y-%m-%d %H:%M:%S") 55 | if str(array[i][3]) == "in": 56 | array[i][3] = "进入" 57 | else: 58 | array[i][3] = "离开" 59 | excel = pd.DataFrame(np.array(array), columns=["人员通行证卡号", "姓名", "识别设备", "进出", "时间"]) 60 | filepath = "media/xlsx/staff_recode.xlsx" 61 | if os.path.exists(filepath): 62 | os.remove(filepath) 63 | excel.to_excel(filepath) 64 | path = request.META.get('SERVER_PROTOCOL').split("/")[0].lower() + "://" + request.META.get( 65 | 'HTTP_HOST') + "/" + filepath 66 | return Response({"path": path}, status=200) 67 | -------------------------------------------------------------------------------- /ruidun_system/work_area/viewsets/carrecord_viewset.py: -------------------------------------------------------------------------------- 1 | import django_filters 2 | from django.conf import settings 3 | from rest_framework.filters import OrderingFilter 4 | from lib.model_viewset import ModelViewSet 5 | from django_filters import rest_framework as filters 6 | 7 | from ..models import CarRecord, CarInfo, CarBreak 8 | from ..serializers.carrecord_serializer import CarRecordSerializer 9 | # 自定义 10 | from rest_framework.decorators import action 11 | from rest_framework.response import Response 12 | from rest_framework import status 13 | import numpy as np 14 | import pandas as pd 15 | import os 16 | 17 | 18 | class CarRecordFilter(django_filters.FilterSet): 19 | # 车辆通行记录过滤器 20 | time = django_filters.DateTimeFilter() 21 | time_gt = django_filters.DateTimeFilter(field_name='intime', lookup_expr='gt') 22 | time_lt = django_filters.DateTimeFilter(field_name='intime', lookup_expr='lt') 23 | # # 车牌号 24 | # car_number = django_filters.CharFilter(field_name='car_id', lookup_expr='id') 25 | # # 车主 26 | # car_owner = django_filters.CharFilter(field_name='car_id', lookup_expr='car_owner') 27 | 28 | class Meta: 29 | model = CarRecord 30 | # fields = ['time_gt', 'time_lt', 'car_number', 'car_owner', 'car_break'] 31 | fields = ['time_gt', 'time_lt', 'cardnumber', 'inplace', 'outplace', 'part_id'] 32 | 33 | 34 | class CarRecordViewset(ModelViewSet): 35 | """车辆通行记录""" 36 | 37 | # sysid = 'SYS0101' 38 | queryset = CarRecord.objects.all().order_by('-intime') 39 | serializer_class = CarRecordSerializer 40 | filterset_class = CarRecordFilter 41 | filter_backends = (OrderingFilter, filters.DjangoFilterBackend,) 42 | ordering_fields = ('intime',) 43 | 44 | # 导出 45 | @action(methods=["GET"], detail=False) 46 | def car_recode_out(self, request): 47 | id_str = request.query_params.get("list") 48 | if not id_str: 49 | return Response({"msg": "请勾选导出的内容"}, status=200) 50 | else: 51 | id_list = id_str.split(",") 52 | value = self.queryset.filter(id__in=id_list).values("cardnumber", "inplace", "intime", "outplace", "outtime") 53 | array = [list(array.values()) for array in value] 54 | for i in range(len(array)): 55 | array[i][2] = array[i][2].strftime("%Y-%m-%d %H:%M:%S") 56 | array[i][4] = array[i][4].strftime("%Y-%m-%d %H:%M:%S") 57 | excel = pd.DataFrame(np.array(array), columns=["车牌号", "进入闸道", "进入时间" ,"离开道闸", "离开时间"]) 58 | filepath = "media/xlsx/car_recode.xlsx" 59 | if os.path.exists(filepath): 60 | os.remove(filepath) 61 | excel.to_excel(filepath) 62 | path = request.META.get('SERVER_PROTOCOL').split("/")[0].lower() + "://" + request.META.get('HTTP_HOST') + "/" + filepath 63 | return Response({"path": path}, status=200) 64 | -------------------------------------------------------------------------------- /ruidun_system/safe/serializers/dangerused_serializer.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | 3 | from rest_framework import serializers 4 | from ..models import DangerUsed, Danger, DangerousCategory 5 | from staff.models import Staff 6 | 7 | 8 | class DangerSerializer(serializers.ModelSerializer): 9 | """危险品模型""" 10 | 11 | category = serializers.SlugRelatedField(label='分类名称', slug_field='name', read_only=True) 12 | 13 | class Meta: 14 | model = Danger 15 | exclude = ('create_time', 'update_time', 'count') 16 | 17 | 18 | class DangerUsedSerializer(serializers.ModelSerializer): 19 | """危险物品管理序列化器""" 20 | 21 | id = serializers.CharField(label='使用记录编号', read_only=True) 22 | danger_id = serializers.CharField(label='危险品编号', allow_null=True, write_only=True) 23 | # danger = serializers.SlugRelatedField(slug_field='name',read_only=True) 24 | danger = DangerSerializer(required=False) 25 | manager_id = serializers.CharField(label='负责人id', allow_null=True) 26 | manager = serializers.SlugRelatedField(label='负责人', slug_field='name', read_only=True) 27 | user_id = serializers.CharField(label='使用人id', allow_null=True, max_length=50) 28 | user = serializers.SlugRelatedField(label='使用人', slug_field='name', read_only=True) 29 | 30 | class Meta: 31 | model = DangerUsed 32 | exclude = ('create_time', 'update_time') 33 | 34 | def validate_danger_id(self, value): 35 | if Danger.objects.filter(pk=value).count() == 0: 36 | raise serializers.ValidationError("危险品不存在") 37 | return value 38 | 39 | def validate_manager(self, value): 40 | # 查看人员表中,是否存在该用户 41 | if Staff.objects.filter(name=value).count() == 0: 42 | raise serializers.ValidationError("负责人不存在") 43 | return value 44 | 45 | def validate_user(self, value): 46 | # 查看人员表中,是否存在该用户 47 | if Staff.objects.filter(name=value).count() == 0: 48 | raise serializers.ValidationError("使用人不存在") 49 | return value 50 | 51 | def create(self, validated_data): 52 | """新建""" 53 | pk = uuid.uuid4() 54 | return DangerUsed.objects.create(pk=pk, **validated_data) 55 | 56 | def update(self, instance, validated_data): 57 | """更新,instance为要更新的对象实例""" 58 | instance.danger_id = validated_data.get('danger_id', instance.danger_id) 59 | instance.manager_id = validated_data.get('manager_id', instance.manager) 60 | instance.user_id = validated_data.get('user_id', instance.user) 61 | instance.count = validated_data.get('count', instance.count) 62 | instance.is_need_back = validated_data.get('is_need_back', instance.is_need_back) 63 | instance.is_back = validated_data.get('is_back', instance.is_back) 64 | instance.start_time = validated_data.get('start_time', instance.start_time) 65 | instance.end_time = validated_data.get('end_time', instance.end_time) 66 | instance.save() 67 | return instance --------------------------------------------------------------------------------