From 128b7436a9d15075809be792bba2d7cd58ebd887 Mon Sep 17 00:00:00 2001 From: AlexP077 Date: Tue, 12 Sep 2023 18:27:03 +0500 Subject: [PATCH] add_preplacement_pvz_dist --- service/admin.py | 4 +-- service/migrations/0032_auto_20230912_1616.py | 27 +++++++++++++++++++ service/models.py | 4 +++ service/service.py | 19 +++++++++++-- 4 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 service/migrations/0032_auto_20230912_1616.py diff --git a/service/admin.py b/service/admin.py index a262c4a..f4ee42b 100644 --- a/service/admin.py +++ b/service/admin.py @@ -12,7 +12,7 @@ from service.models import PlacementPoint from service.models import Rayon from service.models import PrePlacementPoint, Post_and_pvz, Post_and_pvzCategory, Post_and_pvzGroup, OtherObjects, \ OtherObjectsGroup, \ - OtherObjectsCategory + OtherObjectsCategory, PrePlacementPointPVZDistance from service.models import PlacementPointPVZDistance, TaskStatus from postamates.settings import DEBUG from django.core.cache import cache @@ -46,7 +46,7 @@ class Post_and_PVZAdmin(admin.ModelAdmin): my_admin_site.register(Post_and_pvz, Post_and_PVZAdmin) my_admin_site.register(OtherObjects) my_admin_site.register(PrePlacementPoint) - +my_admin_site.register(PrePlacementPointPVZDistance) class TaskStatusAdmin(admin.ModelAdmin): list_display = ('task_name', 'status') diff --git a/service/migrations/0032_auto_20230912_1616.py b/service/migrations/0032_auto_20230912_1616.py new file mode 100644 index 0000000..cbcaed3 --- /dev/null +++ b/service/migrations/0032_auto_20230912_1616.py @@ -0,0 +1,27 @@ +# Generated by Django 3.2 on 2023-09-12 13:16 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('service', '0031_preplacementpoint'), + ] + + operations = [ + migrations.AlterModelOptions( + name='preplacementpoint', + options={'ordering': ('id',)}, + ), + migrations.CreateModel( + name='PrePlacementPointPVZDistance', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('dist', models.FloatField(blank=True, default=None, null=True)), + ('placement_point', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='service.preplacementpoint')), + ('pvz_postamates_group', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='service.post_and_pvzgroup')), + ], + ), + ] diff --git a/service/models.py b/service/models.py index 01702b6..d6e272d 100644 --- a/service/models.py +++ b/service/models.py @@ -212,6 +212,10 @@ class PlacementPointPVZDistance(models.Model): pvz_postamates_group = models.ForeignKey('Post_and_pvzGroup', default=None, on_delete=models.CASCADE) dist = models.FloatField(blank=True, null=True, default=None) +class PrePlacementPointPVZDistance(models.Model): + placement_point = models.ForeignKey('PrePlacementPoint', default=None, on_delete=models.CASCADE) + pvz_postamates_group = models.ForeignKey('Post_and_pvzGroup', default=None, on_delete=models.CASCADE) + dist = models.FloatField(blank=True, null=True, default=None) class TaskStatus(models.Model): class Meta: diff --git a/service/service.py b/service/service.py index aa9bb4d..8c2fa25 100644 --- a/service/service.py +++ b/service/service.py @@ -9,7 +9,7 @@ from postamates.settings import DEFAULT_PLACEMENT_POINT_UPDATE_RADIUS, AGE_DAY_L from service import models from service.enums import PointStatus from service.tasks import raschet -from service.utils import create_columns_dist +from service.utils import create_columns_dist, run_psql_command import base64 import requests from postamates.settings import GEOCODER_API_KEY @@ -64,6 +64,7 @@ class PointService: @staticmethod def make_enrichment(): points = models.PrePlacementPoint.objects.filter(matching_status=MatchingStatus.New.name).all() + groups = models.Post_and_pvzGroup.objects.all() for point in points: origin = point.geometry qs = models.PlacementPoint.objects.filter(status=PointStatus.Working.name).annotate( @@ -164,7 +165,21 @@ class PointService: param1__sum=Sum('param1'))['param1__sum'] point.age_day = AGE_DAY_LIMIT point.save() - + for group in groups: + post_object = models.Post_and_pvz.objects.filter(group__name=group.name).annotate( + distance=Dist("wkt", point.geometry)).order_by('distance').first() + d = models.PrePlacementPointPVZDistance.objects.filter(placement_point=point, + pvz_postamates_group=group).first() + if post_object: + if d: + if d.dist > post_object.distance.m: + d.dist = post_object.distance.m + d.save() + else: + models.PrePlacementPointPVZDistance.objects.create(placement_point=point, + pvz_postamates_group=group, + dist=post_object.distance.m) + run_psql_command() @staticmethod def get_min_distances_to_group(postamat_id: str):