start_matching_func

dev
AlexP077 3 years ago
parent 595c665204
commit 48f126f9c5

@ -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

@ -195,3 +195,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():
@ -245,6 +246,7 @@ def raschet():
except: except:
conn2 = None conn2 = None
log_to_telegram('Не удалось подключиться к базе данных') log_to_telegram('Не удалось подключиться к базе данных')
# prediction_current # prediction_current
if conn2 is not None: if conn2 is not None:
update_records1 = [] update_records1 = []
@ -442,6 +444,28 @@ def load_data(obj_id: int):
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()
@shared_task() @shared_task()
def start_pvz_group_count(instance_id: int): def start_pvz_group_count(instance_id: int):
instance = models.Post_and_pvzGroup.objects.filter(id=instance_id).first() instance = models.Post_and_pvzGroup.objects.filter(id=instance_id).first()

@ -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