Compare commits

...

4 Commits
main ... main

Author SHA1 Message Date
kongfp 951caadfb1 fix bugs 11 months ago
kongfp 6a1552831a fix bugs 11 months ago
kongfp 6888645e24 修改启动脚本 11 months ago
kongfp 930338a139 add workshop and device 11 months ago

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

@ -28,6 +28,8 @@ urlpatterns = [
views.EnterpriseBusiModelNodeDeviceModelViewSet.as_view({'post': 'create', "get": "list"})),
path('warning_statistics/', views.WarningStatisticsModelViewSet.as_view({'post': 'create', "get": "list"})),
path('get_warning_names/', views.WarningStatisticsModelViewSet.as_view({"get": "get_warning_names"})),
path('get_warning_types/', views.WarningStatisticsModelViewSet.as_view({"get": "get_warning_types"})),
path('compute_config/', views.ComputeConfigModelViewSet.as_view({'post': 'create', "get": "list"})),
path('files/', views.FilesModelViewSet.as_view({'post': 'create', "get": "list", "delete": "destroy"})),
@ -39,4 +41,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"})),
]

@ -29,11 +29,12 @@ class UserViewSet(ModelViewSet):
password = data.get('password')
# 验证是否过期
enterprise_obj = EnterpriseModel.objects.filter(account=username, pwd=password).last()
# enterprise_obj = EnterpriseModel.objects.filter(account=username, pwd=password).last()
enterprise_obj = EnterpriseModel.objects.last()
if not enterprise_obj:
response = {
'success': False,
'msg': "该账号不存在",
'msg': "企业不存在",
'data': {
'username': None,
'roles': [],
@ -65,7 +66,7 @@ class UserViewSet(ModelViewSet):
except Exception as e:
response = {
'success': False,
'msg': str(e),
'msg': "用户登录失败,请查证用户名及密码",
'data': {
'username': None,
'roles': [],

@ -1,3 +1,4 @@
import datetime
import json
import logging
import random
@ -13,11 +14,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')
@ -1015,7 +1016,7 @@ class WarningStatisticsModelViewSet(ModelViewSet):
device_suid = data.get("device_suid")
warning_type = data.get("warning_type")
start_trigger_time = data.get("start_time")
end_trigger_time = data.get("end_time")
# end_trigger_time = data.get("end_time")
if warning_level:
self.queryset = self.queryset.filter(warning_level=warning_level)
@ -1045,7 +1046,16 @@ class WarningStatisticsModelViewSet(ModelViewSet):
self.queryset = self.queryset.filter(warning_type=warning_type)
if start_trigger_time:
self.queryset = self.queryset.filter(trigger_time__in=[start_trigger_time, end_trigger_time])
try:
start_datetime = datetime.datetime.strptime(start_trigger_time, "%Y-%m-%d")
except Exception as e:
logger.error(f"查询告警时间格式报错{e},参数为:{start_trigger_time}")
return Response({"data": None, "msg": "时间格式不正确", "success": False, "status": 400})
end_datetime = start_datetime + datetime.timedelta(days=1)
self.queryset = self.queryset.filter(trigger_time__range=[start_datetime, end_datetime])
if not (obj_id or obj_suid):
return Response({
@ -1073,6 +1083,26 @@ class WarningStatisticsModelViewSet(ModelViewSet):
"status": 200
})
def get_warning_names(self, request, *args, **kwargs):
warning_names = self.queryset.values_list("warning_name", flat=True).order_by("warning_name").distinct()
return Response({
"data": warning_names,
"msg": None,
"success": True,
"status": 200
})
def get_warning_types(self, request, *args, **kwargs):
warning_types = self.queryset.values_list('warning_type', flat=True).order_by("warning_type").distinct()
return Response({
"data": warning_types,
"msg": None,
"success": True,
"status": 200
})
class EnterpriseNodeModelViewSet(ModelViewSet):
# 查询类
@ -2063,3 +2093,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,18 +5,19 @@ 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
echo "Waiting for the MySQL Server"
sleep 3
done
#while ! nc -z db 3306 ; do
# echo "Waiting for the MySQL Server"
# sleep 3
#done
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