start_matching_func

dev
AlexP077 3 years ago
parent b1a2cd6552
commit 211ee42300

@ -19,3 +19,4 @@ MARTIN_PORT=3000
# Host domain name (maps in docker-compose to REACT_APP_DOMAIN_URL) # Host domain name (maps in docker-compose to REACT_APP_DOMAIN_URL)
DOMAIN=postnet-dev.selftech.ru DOMAIN=postnet-dev.selftech.ru
GEOCODER_API_KEY = api_key_here

@ -192,3 +192,4 @@ AGE_DAY_BORDER = 30
EXCEL_EXPORT_FILENAME = 'placement_points.xlsx' EXCEL_EXPORT_FILENAME = 'placement_points.xlsx'
JSON_EXPORT_FILENAME = 'placement_points.json' JSON_EXPORT_FILENAME = 'placement_points.json'
DATA_UPLOAD_MAX_NUMBER_FIELDS = None DATA_UPLOAD_MAX_NUMBER_FIELDS = None
GEOCODER_API_KEY = os.getenv('GEOCODER_API_KEY','TzgdKWgyI2nfaz1WHRD-aYJK4e400MiOJQP7Enf1e1M')

@ -24,7 +24,8 @@ import base64
from io import StringIO from io import StringIO
from django.core.cache import cache from django.core.cache import cache
from service.layer_service import LayerService from service.layer_service import LayerService
import requests
from postamates.settings import GEOCODER_API_KEY
@shared_task() @shared_task()
def raschet(): def raschet():
@ -437,3 +438,26 @@ def load_data(obj_id: int):
status.status = "Загрузка данных завершена" status.status = "Загрузка данных завершена"
status.save() status.save()
models.TempFiles.objects.all().delete() models.TempFiles.objects.all().delete()
@shared_task()
def start_matching(obj_id: int):
file = models.TempFiles.objects.get(id=obj_id)
status, _ = models.TaskStatus.objects.get_or_create(task_name='Мэтчинг точек')
excel_file = base64.b64decode(file.data)
df = pd.read_excel(excel_file)
total = df.shape[0]
matched = 0
for _i, row in df.iterrows():
status.status = f'Мэтчинг: {_i} из {total}'
status.save()
addr = row['Адрес']
cat = row['Категория объекта']
req_url = f"https://geocode.search.hereapi.com/v1/geocode?q={addr}&apiKey={GEOCODER_API_KEY}"
response = requests.get(req_url).json()['items'][0]['address']
obj = models.PlacementPoint.objects.filter(street=response['street'], house_number=response['houseNumber'], category=cat).first()
if obj:
matched += 1
status.status = f"Мэтчинг завершен. Смэтчилось {matched}, несмэтчилось {total-matched}"
status.save()
models.TempFiles.objects.all().delete()

@ -22,7 +22,7 @@ from service import utils
from service.enums import PointStatus from service.enums import PointStatus
from service.permissions import UserPermission from service.permissions import UserPermission
from service.service import PointService from service.service import PointService
from service.tasks import raschet, load_post_and_pvz, load_other_objects, load_data from service.tasks import raschet, load_post_and_pvz, load_other_objects, load_data, start_matching
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from django.shortcuts import redirect from django.shortcuts import redirect
from django.contrib import messages from django.contrib import messages
@ -334,6 +334,18 @@ class PlacementPointViewSet(ReadOnlyModelViewSet):
def last_time_ml_run(self, request): def last_time_ml_run(self, request):
return Response({'last_time': models.LastMLCall.objects.first().dt}, status=HTTPStatus.OK) return Response({'last_time': models.LastMLCall.objects.first().dt}, status=HTTPStatus.OK)
@action(detail=False, methods=['post'])
def start_matching(self, request):
file = request.FILES['file'].file
file_bytes = file.read()
excel_base64 = base64.b64encode(file_bytes).decode()
obj = models.TempFiles.objects.create(data=excel_base64)
start_matching.delay(obj.id)
return Response(
{'message': 'OK'},
status=HTTPStatus.OK,
)
class refresh_placement_points(APIView): class refresh_placement_points(APIView):
@staticmethod @staticmethod

Loading…
Cancel
Save