mirror of
https://github.com/GreaterWMS/GreaterWMS.git
synced 2026-06-19 07:36:00 +00:00
355dfbefe6
Former-commit-id: 710132ebaf418af1ef540e2cda73537b6a38a032 [formerly 815cbd4f0709b5d061392b4ab0caab90a7e25e97] [formerly 93affb91a67ea41c7cc39ee6eafa091629549b58 [formerly a489e2a50e18173a7c2862140f0f0093dcf381c5]] [formerly eb7c696e46d0de6cd07607f1270536f350d99501 [formerly a395cdf8535e8ee8e7d133ac4e1d34c5568a47de] [formerly 1f2edad23658f9919b457ea62610956e7764dbc0 [formerly 4b612ae899e10849e74d87bb65d4354001fe60b4]]] [formerly f0f9d2bc4eb1b1c23df4fd48c51f60cbe6646c84 [formerly 43a998c7e2cc1a6c293cc297d1eb7819dca16934]] [formerly 9bb0f2224b4bc7eb0c31f98e71d34dbaeddc02ca [formerly d1415112ccb6daebee059aa5a83887feb594eca9] [formerly 9bb0f2224b4bc7eb0c31f98e71d34dbaeddc02ca [formerly d1415112ccb6daebee059aa5a83887feb594eca9] [formerly 9d2ff6e436769c52c51fe92373a2837cce7639de [formerly c6ba81a118e6ec0d884196e4404a9ffc15922e21]]] [formerly f0f9d2bc4eb1b1c23df4fd48c51f60cbe6646c84 [formerly 43a998c7e2cc1a6c293cc297d1eb7819dca16934] [formerly f0f9d2bc4eb1b1c23df4fd48c51f60cbe6646c84 [formerly 43a998c7e2cc1a6c293cc297d1eb7819dca16934] [formerly 882094cc7f2e1482667e8a162c97d2418052914f [formerly a2484f1e7d214480fc545f6eb375296b80003bf1]]]]] [formerly 0aacfa5ec62c00b7879353d274af2477f2d1057c [formerly ef38218f0ccb7394e14e713e7216214cf1276c3f] [formerly 0aacfa5ec62c00b7879353d274af2477f2d1057c [formerly ef38218f0ccb7394e14e713e7216214cf1276c3f] [formerly 6eaa3a6c3b6405c4ecf33f2298ebe9ad942a588f [formerly 5b54b721c3c117c4fe69297d30daba41fb9e5295]]] [formerly 14de90134656d66ac6ffdb92e106500657feedd9 [formerly ef58d026e05235fb22e5057a7f7c6ec47a52f4b6]] [formerly 4d66cfe753f254ca67419d7bdb57c171a5cea3f5 [formerly 115b821539b9069a867afc973cca7171533c2914] [formerly 4d66cfe753f254ca67419d7bdb57c171a5cea3f5 [formerly 115b821539b9069a867afc973cca7171533c2914] [formerly 49504cb2a4cfdfa6f06be81a34a7bbbadc822291 [formerly 09e0c730aed4f4549c097f1de85e6fef9c45a9a1]]] [formerly 14de90134656d66ac6ffdb92e106500657feedd9 [formerly ef58d026e05235fb22e5057a7f7c6ec47a52f4b6] [formerly 14de90134656d66ac6ffdb92e106500657feedd9 [formerly ef58d026e05235fb22e5057a7f7c6ec47a52f4b6] [formerly e37c42034316ec2587580987e1c0533630839d4c [formerly 7447825f516a6d00d531cd5a2715ba45a50b0a9b [formerly f30653e98acb7e741c669cdb234d90d9aac5f2cf] [formerly 3f491793fc7811a3a587bb9e0bf47ed0d3071cf2 [formerly f3c5597e2368ee488e490c9e4fc808ddccf6cca3]] [formerly 81cadd6db031084e9644d0f8a843a683237d3263 [formerly d9eb4719e24b30f734cc473039211bff269db0cb] [formerly 44ee6df8132dc0f55567d8a15346d9e69d0861fa]] [formerly 44ee6df8132dc0f55567d8a15346d9e69d0861fa [formerly 81d098dc80297196e75aa7a1b50e1a438af282a5]] [formerly c8f3cdf03f472b9bc8669173060b33c02c5d8978 [formerly 44ee6df8132dc0f55567d8a15346d9e69d0861fa [formerly 81d098dc80297196e75aa7a1b50e1a438af282a5] [formerly c8f3cdf03f472b9bc8669173060b33c02c5d8978 [formerly 11aa70bc956f1713927a815ef063e34ce51eba2f [formerly fa7d83e17f92e4dfc5f473a3aa087fd3b27b7ab9] [formerly c8f3cdf03f472b9bc8669173060b33c02c5d8978 [formerlyb5e22373b2]]]]]]]]]]]] Former-commit-id: 195193d1f4397e6b5ff7f62d011fe8a966878f2e [formerly 05356a5c180ad26aded4d3dc35f952e499162c3e] [formerly 53616636866618ab1613ea39dc3e6b1a91e419b2 [formerly ee71d5853fd2cb8a797ba0285b3fcf782a894571]] [formerly 2269a482910ff8166f43517b21c0a4dfc244a892 [formerly 68d81bdf94fea8ac841cbf5d3f5c212499338165] [formerly d915de7428cbaefbf77c8a0bc18d5192d906295c [formerly fff98ea75fc9b92af4b29989be988f24263ccf6d]]] [formerly 8046eb3ff01df83b76a739d0e0acbb4a2969490f [formerly ec6eee9a8f8230c3170b9a601377edb199f41a3a]] [formerly 4f09faec44bee906c26e0a0149f5c01f137e7342 [formerly 44040e2e836d45b525d2c95902024f1cf83dff01] [formerly 4f09faec44bee906c26e0a0149f5c01f137e7342 [formerly 44040e2e836d45b525d2c95902024f1cf83dff01] [formerly 389a0275bcf031cdfe4d228c9081da06c41443ad [formerly f9659235d6f31d603d63622b06fb96932d9aaa1b]]] [formerly 8046eb3ff01df83b76a739d0e0acbb4a2969490f [formerly ec6eee9a8f8230c3170b9a601377edb199f41a3a] [formerly 8046eb3ff01df83b76a739d0e0acbb4a2969490f [formerly ec6eee9a8f8230c3170b9a601377edb199f41a3a] [formerly 3cc35de39c466500c6412ce81bad2b5dd9c874ab [formerly 6eb491686be74f7e0bdc97866be772259ca31b5c]]]]] Former-commit-id: 0299acfe8ebebf061aeb88f8dd8c5fb6dbc3fbd6 [formerly 02193e0e2092fa0cca39c92a4c65a4c4a2436d9f] [formerly 0299acfe8ebebf061aeb88f8dd8c5fb6dbc3fbd6 [formerly 02193e0e2092fa0cca39c92a4c65a4c4a2436d9f] [formerly 9fc8a024de977c7650912150582e0ec12c181b17 [formerly a30f4efc5ae5951cc2ad91106b2f62d5add47c61]]] [formerly 9a351e27a8954996584c86d69b170e1fd0629c7e [formerly 409b8b0a168c7e891f12e1677ced43866f334924] [formerly 7467168a44b436c3a3fea6d7b93d0adc8a6ce49c [formerly 0f6f03018b29257f048557a20bba63fe97ad0f65]] [formerly 7467168a44b436c3a3fea6d7b93d0adc8a6ce49c [formerly 0f6f03018b29257f048557a20bba63fe97ad0f65] [formerly 29d3047970f8c94bc6df6e9623aff8e7b67db092 [formerly 21cf72db4456f82fc322db1b201add1634f89cda]]]] Former-commit-id: 9a351e27a8954996584c86d69b170e1fd0629c7e [formerly 409b8b0a168c7e891f12e1677ced43866f334924] [formerly 9a351e27a8954996584c86d69b170e1fd0629c7e [formerly 409b8b0a168c7e891f12e1677ced43866f334924] [formerly 7467168a44b436c3a3fea6d7b93d0adc8a6ce49c [formerly 0f6f03018b29257f048557a20bba63fe97ad0f65]]] Former-commit-id: 103391802bc7fd77e58325a67a0d57d3ef040c07 [formerly b79267c743d1cbc2ff9bb668e19f9ccf486d1a91] [formerly 582f764db5fa461236e9b7586d8aefd7674c7fcf [formerly 07c55548bb1cd250093f3d86c6624f59e6b5c145]] Former-commit-id: 0861effa93535c25ef6fd11c18152d23926b1f2a [formerly adada0022bce98c7672dcfbe45f64e77930d6f18] Former-commit-id: 757fe374464916e059512d687702e8758a619871 Former-commit-id: ef125af06a88fa46995e1d7117b10b36673a4597 [formerly d374629df51c3fb9f17055db47c126d901474e46] Former-commit-id: 8b3b07f7c7fcb90cc377cc4420cf77dd074911cf Former-commit-id:2bf47b8be0[formerly 9cb477b490fc0cd80bc5d33c2ef16a69a301212e] [formerly 7e6e1613e16b642ed06b14154ffe12865b75d7ef [formerly 64469b896f1961e255615c08905fa4b389e90570]] [formerly 541cb693f9cb21240e1a04407a3597ba5bc1ffe6] [formerly c26ebab1fe2f58fd3627a97d026875957349eb24 [formerly bf85a742c75aba86b8571ecb3f14712406b21270 [formerly 0a37f8c2c23041a8fb5b635ed6e2c7003e711741] [formerly ec033efbef86026d93383b797f3ceeb42e0ec924 [formerly 9ca528bd6bf7aaf2271df25eb2d9274395c22c44]]]] Former-commit-id: b85fdda276646f7cfc602ef08c44b0ab7f32db12 [formerly fe52d269b63215da57c6f9729cd48a9a8b922127 [formerly e67dd0308b172480e347aa908f35caeb3dad604d] [formerly b3ad684c1097da55a194c521cda9975278ac7d4b [formerly 57a4ea7ba88c5a8b1d4eebf88277fde9d5310bc1]]] Former-commit-id: 3625614f3bc56556781e425bfe885d81756c38cd Former-commit-id: 9f07ab8c5b13e6c114b8b3feaf4e502c62cab35f [formerly 6d30bced7f6a1e7de68e364d51dd829fe912ac73] Former-commit-id: d144c1f2d0f7f2048e28040554771db0079f3ead
237 lines
9.9 KiB
Python
237 lines
9.9 KiB
Python
from rest_framework import viewsets
|
||
from .models import ListModel
|
||
from . import serializers
|
||
from .page import MyPageNumberPagination
|
||
from rest_framework.filters import OrderingFilter
|
||
from django_filters.rest_framework import DjangoFilterBackend
|
||
from rest_framework.response import Response
|
||
from .filter import Filter
|
||
from rest_framework.exceptions import APIException
|
||
from django.db.models import Q
|
||
from binsize.models import ListModel as binsize
|
||
from scanner.models import ListModel as scanner
|
||
from binproperty.models import ListModel as binproperty
|
||
from .serializers import FileRenderSerializer
|
||
from django.http import StreamingHttpResponse
|
||
from .files import FileRenderCN, FileRenderEN
|
||
from rest_framework.settings import api_settings
|
||
from utils.md5 import Md5
|
||
from .serializers import ScannerBinsetTagGetSerializer
|
||
|
||
class ScannerBinsetTagView(viewsets.ModelViewSet):
|
||
"""
|
||
retrieve:
|
||
Response a data list(get)
|
||
|
||
http://127.0.0.1:8008/binset/scannerbintag/3d89ad23d185d5f206d860745c5c4121/
|
||
"""
|
||
pagination_class = MyPageNumberPagination
|
||
filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
||
ordering_fields = ['id', "create_time", "update_time", ]
|
||
filter_class = Filter
|
||
lookup_field = 'bar_code'
|
||
def get_project(self):
|
||
try:
|
||
bar_code = self.kwargs['bar_code']
|
||
return bar_code
|
||
except:
|
||
return None
|
||
|
||
def get_queryset(self):
|
||
bar_code = self.get_project()
|
||
if self.request.user:
|
||
if bar_code is None:
|
||
return ListModel.objects.filter(openid=self.request.auth.openid, is_delete=False)
|
||
else:
|
||
return ListModel.objects.filter(openid=self.request.auth.openid, bar_code=bar_code, is_delete=False)
|
||
else:
|
||
return ListModel.objects.none()
|
||
|
||
def get_serializer_class(self):
|
||
if self.action in ['list', 'retrieve', 'destroy']:
|
||
return serializers.ScannerBinsetTagGetSerializer
|
||
else:
|
||
return self.http_method_not_allowed(request=self.request)
|
||
|
||
|
||
|
||
|
||
class APIViewSet(viewsets.ModelViewSet):
|
||
"""
|
||
retrieve:
|
||
Response a data list(get)
|
||
|
||
list:
|
||
Response a data list(all)
|
||
|
||
create:
|
||
Create a data line(post)
|
||
|
||
delete:
|
||
Delete a data line(delete)
|
||
|
||
partial_update:
|
||
Partial_update a data(patch:partial_update)
|
||
|
||
update:
|
||
Update a data(put:update)
|
||
"""
|
||
pagination_class = MyPageNumberPagination
|
||
filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
||
ordering_fields = ['id', "create_time", "update_time", ]
|
||
filter_class = Filter
|
||
|
||
def get_project(self):
|
||
try:
|
||
id = self.kwargs.get('pk')
|
||
return id
|
||
except:
|
||
return None
|
||
|
||
def get_queryset(self):
|
||
id = self.get_project()
|
||
if self.request.user:
|
||
if id is None:
|
||
return ListModel.objects.filter(openid=self.request.auth.openid, is_delete=False)
|
||
else:
|
||
return ListModel.objects.filter(openid=self.request.auth.openid, id=id, is_delete=False)
|
||
else:
|
||
return ListModel.objects.none()
|
||
|
||
def get_serializer_class(self):
|
||
if self.action in ['list', 'retrieve', 'destroy']:
|
||
return serializers.BinsetGetSerializer
|
||
elif self.action in ['create']:
|
||
return serializers.BinsetPostSerializer
|
||
elif self.action in ['update']:
|
||
return serializers.BinsetUpdateSerializer
|
||
elif self.action in ['partial_update']:
|
||
return serializers.BinsetPartialUpdateSerializer
|
||
else:
|
||
return self.http_method_not_allowed(request=self.request)
|
||
|
||
def create(self, request, *args, **kwargs):
|
||
data = self.request.data
|
||
data['openid'] = self.request.auth.openid
|
||
if ListModel.objects.filter(openid=data['openid'], bin_name=data['bin_name'], is_delete=False).exists():
|
||
raise APIException({"detail": "Data exists"})
|
||
else:
|
||
if binsize.objects.filter(openid=data['openid'], bin_size=data['bin_size'], is_delete=False).exists():
|
||
if binproperty.objects.filter(Q(openid=data['openid'], bin_property=data['bin_property'], is_delete=False) |
|
||
Q(openid='init_data', bin_property=data['bin_property'], is_delete=False)).exists():
|
||
data['bar_code'] = Md5.md5(data['bin_name'])
|
||
serializer = self.get_serializer(data=data)
|
||
serializer.is_valid(raise_exception=True)
|
||
serializer.save()
|
||
scanner.objects.create(openid=self.request.auth.openid, mode="BINSET", code=data['bin_name'],
|
||
bar_code=data['bar_code'])
|
||
headers = self.get_success_headers(serializer.data)
|
||
return Response(serializer.data, status=200, headers=headers)
|
||
else:
|
||
raise APIException({"detail": "Bin property does not exists or it has been changed"})
|
||
else:
|
||
raise APIException({"detail": "Bin size does not exists or it has been changed"})
|
||
|
||
def update(self, request, pk):
|
||
qs = self.get_object()
|
||
if qs.openid != self.request.auth.openid:
|
||
raise APIException({"detail": "Cannot update data which not yours"})
|
||
else:
|
||
data = self.request.data
|
||
if binsize.objects.filter(openid=self.request.auth.openid, bin_size=data['bin_size'], is_delete=False).exists():
|
||
if binproperty.objects.filter(Q(openid=self.request.auth.openid, bin_property=data['bin_property'], is_delete=False) |
|
||
Q(openid='init_data', bin_property=data['bin_property'], is_delete=False)).exists():
|
||
serializer = self.get_serializer(qs, data=data)
|
||
serializer.is_valid(raise_exception=True)
|
||
serializer.save()
|
||
headers = self.get_success_headers(serializer.data)
|
||
return Response(serializer.data, status=200, headers=headers)
|
||
else:
|
||
raise APIException({"detail": "Bin property does not exists or it has been changed"})
|
||
else:
|
||
raise APIException({"detail": "Bin size does not exists or it has been changed"})
|
||
|
||
def partial_update(self, request, pk):
|
||
qs = self.get_object()
|
||
if qs.openid != self.request.auth.openid:
|
||
raise APIException({"detail": "Cannot partial_update data which not yours"})
|
||
else:
|
||
data = self.request.data
|
||
if binsize.objects.filter(openid=self.request.auth.openid, bin_size=data['bin_size'], is_delete=False).exists():
|
||
if binproperty.objects.filter(Q(openid=self.request.auth.openid, bin_property=data['bin_property'], is_delete=False) |
|
||
Q(openid='init_data', bin_property=data['bin_property'], is_delete=False)).exists():
|
||
serializer = self.get_serializer(qs, data=data, partial=True)
|
||
serializer.is_valid(raise_exception=True)
|
||
serializer.save()
|
||
headers = self.get_success_headers(serializer.data)
|
||
return Response(serializer.data, status=200, headers=headers)
|
||
else:
|
||
raise APIException({"detail": "Bin property does not exists or it has been changed"})
|
||
else:
|
||
raise APIException({"detail": "Bin size does not exists or it has been changed"})
|
||
|
||
def destroy(self, request, pk):
|
||
qs = self.get_object()
|
||
if qs.openid != self.request.auth.openid:
|
||
raise APIException({"detail": "Cannot delete data which not yours"})
|
||
else:
|
||
qs.is_delete = True
|
||
qs.save()
|
||
serializer = self.get_serializer(qs, many=False)
|
||
headers = self.get_success_headers(serializer.data)
|
||
return Response(serializer.data, status=200, headers=headers)
|
||
|
||
class FileDownloadView(viewsets.ModelViewSet):
|
||
renderer_classes = (FileRenderCN, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
|
||
filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
||
ordering_fields = ['id', "create_time", "update_time", ]
|
||
filter_class = Filter
|
||
|
||
def get_project(self):
|
||
try:
|
||
id = self.kwargs.get('pk')
|
||
return id
|
||
except:
|
||
return None
|
||
|
||
def get_queryset(self):
|
||
id = self.get_project()
|
||
if self.request.user:
|
||
if id is None:
|
||
return ListModel.objects.filter(openid=self.request.auth.openid, is_delete=False)
|
||
else:
|
||
return ListModel.objects.filter(openid=self.request.auth.openid, id=id, is_delete=False)
|
||
else:
|
||
return ListModel.objects.none()
|
||
|
||
def get_serializer_class(self):
|
||
if self.action in ['list']:
|
||
return serializers.FileRenderSerializer
|
||
else:
|
||
return self.http_method_not_allowed(request=self.request)
|
||
|
||
def get_lang(self, data):
|
||
lang = self.request.META.get('HTTP_LANGUAGE')
|
||
if lang:
|
||
if lang == 'zh-hans':
|
||
return FileRenderCN().render(data)
|
||
else:
|
||
return FileRenderEN().render(data)
|
||
else:
|
||
return FileRenderEN().render(data)
|
||
|
||
def list(self, request, *args, **kwargs):
|
||
from datetime import datetime
|
||
dt = datetime.now()
|
||
data = (
|
||
FileRenderSerializer(instance).data
|
||
for instance in self.filter_queryset(self.get_queryset())
|
||
)
|
||
renderer = self.get_lang(data)
|
||
response = StreamingHttpResponse(
|
||
renderer,
|
||
content_type="text/csv"
|
||
)
|
||
response['Content-Disposition'] = "attachment; filename='binset_{}.csv'".format(str(dt.strftime('%Y%m%d%H%M%S%f')))
|
||
return response
|