add_preplacement_pvz_dist

dev
AlexP077 2 years ago
parent d411815492
commit 128b7436a9

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

@ -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')),
],
),
]

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

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

Loading…
Cancel
Save