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)
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'
JSON_EXPORT_FILENAME = 'placement_points.json'
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 django.core.cache import cache
from service.layer_service import LayerService
import requests
from postamates.settings import GEOCODER_API_KEY
@shared_task()
def raschet():
@ -245,6 +246,7 @@ def raschet():
except:
conn2 = None
log_to_telegram('Не удалось подключиться к базе данных')
# prediction_current
if conn2 is not None:
update_records1 = []
@ -442,6 +444,28 @@ def load_data(obj_id: int):
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()
def start_pvz_group_count(instance_id: int):
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.permissions import UserPermission
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 django.shortcuts import redirect
from django.contrib import messages
@ -334,6 +334,18 @@ class PlacementPointViewSet(ReadOnlyModelViewSet):
def last_time_ml_run(self, request):
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):
@staticmethod

Loading…
Cancel
Save