add workshop and device

main
kongfp 6 months ago
parent e993468eb1
commit 930338a139

1
.gitignore vendored

@ -11,6 +11,7 @@ __pycache__/
migrations
pictures
avatars
locations
# Distribution / packaging
.Python

@ -336,3 +336,32 @@ class MessageModel(models.Model):
class Meta:
db_table = "message"
class WorkshopModel(models.Model):
CODE = ((0, ""), (1, ""))
name = models.CharField(max_length=1024, default="", verbose_name="位置名称", null=True, blank=True)
picture = models.ImageField(upload_to='locations', verbose_name="位置图片")
status = models.IntegerField(verbose_name="是否删除", default=0, choices=CODE)
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', null=True)
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间', null=True)
class Meta:
db_table = "workshop"
class WorkshopDeviceModel(models.Model):
CODE = ((0, ""), (1, ""))
workshop_id = models.IntegerField(verbose_name="布点id", null=False)
device_id = models.IntegerField(verbose_name="设备id", null=False)
x_ordinate = models.CharField(max_length=128, verbose_name="横坐标", null=False)
y_ordinate = models.CharField(max_length=128, verbose_name="纵坐标", null=False)
icon = models.CharField(max_length=8, verbose_name="图标", null=True)
status = models.IntegerField(verbose_name="是否删除", default=0, choices=CODE)
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', null=True)
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间', null=True)
class Meta:
db_table = "workshop_device"

@ -1,6 +1,7 @@
import copy
import datetime
import json
import os
import random
import re
from decimal import Decimal
@ -13,7 +14,8 @@ from app import consts, shortuuid
from app.models import AuthUser, ServerModel, AlgModelModel, ModelClassificationModel, EnterpriseModel, \
EnterpriseDeviceModel, DeviceClassificationModel, WarningStatisticsModel, EnterpriseNodeModel, ComputeConfigModel, \
ModelVersionModel, EnterpriseAlertDeviceModel, ModelHubModel, EnterpriseBusiModelModel, \
EnterpriseBusiModelNodeModel, EnterpriseBusiModelNodeDeviceModel, ServerLogModel, FilesModel, MessageModel
EnterpriseBusiModelNodeModel, EnterpriseBusiModelNodeDeviceModel, ServerLogModel, FilesModel, MessageModel, \
WorkshopModel, WorkshopDeviceModel
import logging
logger = logging.getLogger('mylogger')
@ -489,3 +491,51 @@ class MessageSerializer(serializers.ModelSerializer):
ret = super().to_internal_value(data)
return ret
class WorkshopSerializer(serializers.ModelSerializer):
class Meta:
model = WorkshopModel
fields = "__all__"
def to_representation(self, instance):
ret = super().to_representation(instance)
ret["picture"] = ret["picture"].replace("127.0.0.1", os.getenv("SERVER_IP", "192.168.10.21:8000"))
return ret
def to_internal_value(self, data):
ret = super().to_internal_value(data)
return ret
class WorkshopDeviceSerializer(serializers.ModelSerializer):
class Meta:
model = WorkshopDeviceModel
fields = "__all__"
def to_representation(self, instance):
ret = super().to_representation(instance)
try:
device_obj = EnterpriseDeviceModel.objects.filter(id=instance.device_id).get()
except:
device_obj = None
ret["device_name"] = device_obj.name if device_obj else None
try:
workshop_obj = WorkshopModel.objects.filter(id=instance.workshop_id).get()
except:
workshop_obj = None
ret["workshop_name"] = workshop_obj.name if workshop_obj else None
return ret
def to_internal_value(self, data):
ret = super().to_internal_value(data)
return ret

@ -39,4 +39,7 @@ urlpatterns = [
path('warnings_and_message/', views.WarningsAndMessageModelViewSet.as_view({'get': 'list'})),
path('classify_warnings/', views.ClassifyWarningsModelViewSet.as_view({'get': 'list'})),
path('workshops/', views.WorkshopModelViewSet.as_view({'post': 'create', "get": "list"})),
path('workshop_devices/', views.WorkshopDeviceModelViewSet.as_view({'post': 'create', "get": "list", "delete": "destroy"})),
path('get_devices/', views.WorkshopDeviceModelViewSet.as_view({"get": "get_devices"})),
]

@ -13,11 +13,11 @@ from app.serializers import ServerSerializer, AlgModelSerializer, EnterpriseSeri
DeviceClassificationSerializer, WarningStatisticsSerializer, EnterpriseNodeSerializer, ComputeConfigSerializer, \
ModelVersionSerializer, EnterpriseAlertDeviceSerializer, ModelHubSerializer, EnterpriseBusiModelSerializer, \
EnterpriseBusiModelNodeSerializer, EnterpriseBusiModelNodeDeviceSerializer, ServerLogSerializer, \
ModelClassificationSerializer, FilesSerializer, MessageSerializer
ModelClassificationSerializer, FilesSerializer, MessageSerializer, WorkshopSerializer, WorkshopDeviceSerializer
from app.models import ServerModel, AlgModelModel, EnterpriseModel, EnterpriseDeviceModel, DeviceClassificationModel, \
WarningStatisticsModel, EnterpriseNodeModel, ComputeConfigModel, ModelVersionModel, EnterpriseAlertDeviceModel, \
ModelHubModel, EnterpriseBusiModelModel, EnterpriseBusiModelNodeModel, EnterpriseBusiModelNodeDeviceModel, \
ServerLogModel, ModelClassificationModel, FilesModel, MessageModel
ServerLogModel, ModelClassificationModel, FilesModel, MessageModel, WorkshopModel, WorkshopDeviceModel
logger = logging.getLogger('mylogger')
@ -2063,3 +2063,218 @@ class ClassifyWarningsModelViewSet(ModelViewSet):
"success": True,
"status": 200
})
class WorkshopModelViewSet(ModelViewSet):
# 查询类
queryset = WorkshopModel.objects.all().order_by("id")
# 序列化类
serializer_class = WorkshopSerializer
# 分页类
pagination_class = MyPageNumberPagination
def list(self, request, *args, **kwargs):
data = request.query_params
obj_id = data.get("id")
status = data.get("status", 0)
if status in (0, 1):
self.queryset = self.queryset.filter(status=status)
if not obj_id:
return Response({
"data": super().list(request, *args, **kwargs).data,
"msg": None,
"success": True,
"status": 200
})
else:
try:
instance = self.queryset.filter(id=obj_id).get()
except Exception as e:
logger.error(f"查询对象报错:{e}")
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
serializer = self.get_serializer(instance)
return Response({
"data": serializer.data,
"msg": None,
"success": True,
"status": 200
})
def create(self, request, *args, **kwargs):
data = request.data
obj_id = data.get("id")
if not obj_id:
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
# return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
return Response({
"data": serializer.data,
"msg": None,
"success": True,
"status": 200
}, headers=headers)
else:
partial = kwargs.pop('partial', True)
try:
instance = self.queryset.filter(id=obj_id).get()
except Exception as e:
logger.error(f"查询对象报错:{e}")
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
instance._prefetched_objects_cache = {}
# 同步删除所有相关联记录
if data.get("status") in (1, "1"):
WorkshopDeviceModel.objects.filter(workshop_id=obj_id).all().update(status=1)
return Response({
"data": serializer.data,
"msg": None,
"success": True,
"status": 200
})
class WorkshopDeviceModelViewSet(ModelViewSet):
# 查询类
queryset = WorkshopDeviceModel.objects.all().order_by("id")
# 序列化类
serializer_class = WorkshopDeviceSerializer
# 分页类
pagination_class = MyPageNumberPagination
def list(self, request, *args, **kwargs):
data = request.query_params
obj_id = data.get("id")
status = data.get("status", 0)
workshop_id = data.get("workshop_id")
if status in (0, 1):
self.queryset = self.queryset.filter(status=status)
if workshop_id:
self.queryset = self.queryset.filter(workshop_id=workshop_id)
if not obj_id:
return Response({
"data": super().list(request, *args, **kwargs).data,
"msg": None,
"success": True,
"status": 200
})
else:
try:
instance = self.queryset.filter(id=obj_id).get()
except Exception as e:
logger.error(f"查询对象报错:{e}")
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
serializer = self.get_serializer(instance)
return Response({
"data": serializer.data,
"msg": None,
"success": True,
"status": 200
})
def create(self, request, *args, **kwargs):
data = request.data
obj_id = data.get("id") or data.get("wd_id")
# 设备重复绑定
# device_id = data.get("device_id")
# workshop_id = data.get("workshop_id")
# exist_obj = self.queryset.filter(device_id=device_id).last()
# if exist_obj:
# if exist_obj.workshop_id == workshop_id:
# obj_id = obj_id if obj_id else exist_obj.id
if not obj_id:
# exist_id = data.get("wd_id")
# WorkshopDeviceModel.objects.filter(id=exist_id).update(status=1)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response({
"data": serializer.data,
"msg": "新增成功",
"success": True,
"status": 200
}, headers=headers)
else:
partial = kwargs.pop('partial', True)
try:
instance = self.queryset.filter(id=obj_id).get()
except Exception as e:
logger.error(f"查询对象报错:{e}")
return Response({"msg": "该对象不存在", "status": 400, "success": False, "data": None})
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
if getattr(instance, '_prefetched_objects_cache', None):
instance._prefetched_objects_cache = {}
return Response({
"data": serializer.data,
"msg": "编辑成功",
"success": True,
"status": 200
})
def destroy(self, request, *args, **kwargs):
data = request.data
ids = data.get("ids")
self.queryset.filter(id__in=ids).all().update(status=1)
return Response({
"data": None,
"msg": "删除成功",
"success": True,
"status": 200
})
def get_devices(self, request, *args, **kwargs):
device_ids_dict = dict()
# device_ids = self.queryset.filter(status=0).order_by("id").values("device_id", "id")
wd_objs = self.queryset.filter(status=0).order_by("id").all()
wd_objs_serializer = self.get_serializer(wd_objs, many=True)
for obj in wd_objs_serializer.data:
device_ids_dict[obj.get("device_id")] = obj
queryset = EnterpriseDeviceModel.objects.all()
serializer = EnterpriseDeviceSerializer(queryset, many=True)
res = []
for i in serializer.data:
if i.get("id") in device_ids_dict:
i["is_binding"] = True
i["wd_id"] = device_ids_dict[i.get("id")].get("id")
i["workshop_name"] = device_ids_dict[i.get("id")].get("workshop_name")
else:
i["is_binding"] = False
res.append(i)
return Response({
"data": res,
"msg": None,
"success": True,
"status": 200
})

@ -5,6 +5,7 @@ export MYSQL_USER="general"
export MYSQL_PASSWORD="#Yaxin0504"
export MYSQL_HOST="127.0.0.1"
export MYSQL_PORT="3306"
export SERVER_IP="192.168.10.21:8000"
while ! nc -z db 3306 ; do
@ -16,7 +17,7 @@ pip install -r requirements.txt&&
python manage.py makemigrations&&
python manage.py migrate&&
nohup python3 manage.py runserver 0.0.0.0:8000 &&
nohup python3 manage.py runserver 0.0.0.0:8000 &
echo '通用平台项目启动完成'
tail -f /dev/null

Loading…
Cancel
Save