safesite/safesite/viewsdrf.py

163 lines
7.9 KiB
Python

from .models import *
from .serializers import *
from rest_framework.views import APIView
from rest_framework.generics import ListAPIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response
from rest_framework import generics
from rest_framework import status
class EquipmentCheckFormAPIView(APIView):
def get(self,request):
userid = request.session['userid']
usecomp = User.objects.get(userid=userid).usecomp
queryset = EquipmentCheckForm.objects.filter(deletemark=1,usecomp=usecomp).order_by('-pk')
total = queryset.count()
serializer = EquipmentCheckFormSerializers2(instance=queryset,many=True)
ret = {'total':total,'rows':serializer.data}
return Response(ret)
def post(self,request):
userid = request.session['userid']
user = User.objects.get(userid=userid)
usecomp = user.usecomp
id = request.data.get('id',0)
instance = EquipmentCheckForm.objects.filter(id=id)
reqdata = request.data
serializer = EquipmentCheckFormSerializers(data=reqdata)
if serializer.is_valid():
if instance:
serializer.update(instance,reqdata)
for i in request.data['items']:
if 'id' in i and i['id']:
if i['type'] and i['type']!='null':
EquipmentCheckItem.objects.filter(id=i['id']).update(name=i['name'], content=i['content'], type=Dickey.objects.get(pk=i['type']))
else:
EquipmentCheckItem.objects.filter(id=i['id']).update(name=i['name'], content=i['content'])
else:
if i['type'] and i['type']!='null':
iteminstance = EquipmentCheckItem.objects.create(name=i['name'], content=i['content'], type=Dickey.objects.get(pk=i['type']))
else:
iteminstance = EquipmentCheckItem.objects.create(name=i['name'], content=i['content'])
EFormItems.objects.create(equipment_check_form=instance.first(),equipment_check_item=iteminstance)
res = {'code':200,'msg':'success','data':{}}
else:
reqdata['usecomp'] = usecomp
reqdata['createby'] = user
if EquipmentCheckForm.objects.filter(name=reqdata['name'],usecomp=usecomp, deletemark=1).exists():
res = {'code':400,'msg':'同名表已存在','data':{}}
else:
forminstance = serializer.create(reqdata)
for i in request.data['items']:
if 'id' in i and i['id']:
if i['type'] and i['type']!='null':
EquipmentCheckItem.objects.filter(id=i['id']).update(name=i['name'], content=i['content'], type=Dickey.objects.get(pk=i['type']))
else:
EquipmentCheckItem.objects.filter(id=i['id']).update(name=i['name'], content=i['content'])
else:
if i['type'] and i['type']!='null':
iteminstance = EquipmentCheckItem.objects.create(name=i['name'], content=i['content'], type=Dickey.objects.get(pk=i['type']))
else:
iteminstance = EquipmentCheckItem.objects.create(name=i['name'], content=i['content'])
EFormItems.objects.create(equipment_check_form=instance.first(),equipment_check_item=iteminstance)
res = {'code':200,'msg':'success','data':{}}
return Response(res)
return Response({'code':404,'msg':'验证错误','data':serializer.errors}, status=404)
class EquipmentCheckFormDetailView(generics.RetrieveUpdateDestroyAPIView):
queryset = EquipmentCheckForm.objects.all()
serializer_class = EquipmentCheckFormSerializers
def destroy(self, request, *args, **kwargs):
obj = EquipmentCheckForm.objects.get(id=kwargs['pk'])
obj.deletemark=0
obj.save()
return Response(status=status.HTTP_204_NO_CONTENT)
from django.contrib.auth.hashers import check_password
import time
import hashlib
import json
from django.core.cache import cache
import random
import string
def ranstr(num):
salt = ''.join(random.sample(string.ascii_lowercase + string.digits, num))
return salt
def md5(st):
h1 = hashlib.md5()
h1.update(st.encode(encoding = 'utf-8'))
return h1.hexdigest()
class AuthToken(APIView):
def post(self, request):
"""获取token
获取token
"""
data = request.data
user = User.objects.filter(username=data['username'], deletemark=1, usecomp__enabled=True).first()
if user:
if check_password(data['password'], user.epassword):
data = {'user_id': user.userid, 'company_id': user.usecomp.partid}
token = ranstr(12)
cache.set(token, data, 1800)
return Response({'code': 200, 'data': {'token': token}, 'msg': None})
return Response({'code': 400, 'msg': '用户不存在或已禁用', 'data': None})
from django.db.models import F
# from django.utils import timezone
from datetime import datetime, timedelta
class TroubleListSerializer(serializers.ModelSerializer):
id = serializers.CharField(source='troubleid')
fxr_name = serializers.CharField(source='fxr.name', read_only=True)
fxbm_name = serializers.CharField(source='fxbm.partname', read_only=True)
yhlb_name = serializers.CharField(source='yhlb.dickeyname', read_only=True)
zgr_name = serializers.CharField(source='zgr.name', read_only=True)
yhpg_name = serializers.CharField(source='yhpg.dickeyname', read_only=True)
yhdj_name = serializers.CharField(source='yhdj.dickeyname', read_only=True)
zgbm_name = serializers.CharField(source='zgbm.partname', read_only=True)
jclx_name = serializers.CharField(source='jclx.dickeyname', read_only=True)
class Meta:
model = Trouble
fields = ['yhms', 'yhzt', 'fxsj', 'tbsj', 'yhnum', 'zgqx', 'zgsj', 'id',
'fxr_name', 'fxbm_name', 'yhlb_name', 'zgr_name', 'yhpg_name', 'yhdj_name', 'zgbm_name', 'jclx_name']
class TroubleListView(APIView):
def post(self, request):
# 查询某一时间段的隐患, 默认是当天
data = request.data
if 'token' not in data:
return Response({'code': 400, 'msg': '请提供token', 'data': None})
user_data = cache.get(data['token'], None)
if user_data is None:
return Response({'code': 400, 'msg': '无效token', 'data': None})
company_id = user_data['company_id']
objs = Trouble.objects.filter(usecomp__partid=company_id).exclude(deletemark=0)
if data.get('type', 1) == 2: # 当时整改的
if data.get('time_start', None):
objs = objs.filter(zgsj__gte=data['time_start'])
if data.get('time_end', None):
objs = objs.filter(zgsj__lte=data['time_end'])
if data.get('date', None):
day = datetime.strptime(data['date'],'%Y-%m-%d').date()
objs = objs.filter(zgsj__year=day.year, zgsj__month=day.month, zgsj__day=day.day)
else:
if data.get('time_start', None):
objs = objs.filter(fxsj__gte=data['time_start'])
if data.get('time_end', None):
objs = objs.filter(fxsj__lte=data['time_end'])
if data.get('date', None):
day = datetime.strptime(data['date'],'%Y-%m-%d').date()
objs = objs.filter(fxsj__year=day.year, fxsj__month=day.month, fxsj__day=day.day)
if objs.count() >= 1000:
return Response({'code': 400, 'msg': '列表过长,请重新规划时间范围', 'data': None})
serializer = TroubleListSerializer(instance=objs, many=True)
return Response({'code': 200, 'data': serializer.data, 'msg': None})