count_pvz_for_placementpoint

dev
AlexP077 3 years ago
parent 145fe263f4
commit e159fb24e5

@ -30,6 +30,7 @@ services:
sh -c "python manage.py migrate &&
python manage.py collectstatic --noinput &&
python manage.py loaddata fixtures/groups.json &&
python3 manage.py loaddata fixtures/post_and_pvz.json &&
python manage.py runserver 0.0.0.0:${DJANGO_PORT}"
environment:
<<: *postgres-variables

@ -0,0 +1,22 @@
[
{
"model": "service.post_and_pvzcategory",
"pk": 1,
"fields": {
"name": "ПВЗ",
"image": "",
"visible": true,
"inlude_in_ml": true
}
},
{
"model": "service.post_and_pvzcategory",
"pk": 2,
"fields": {
"name": "Постамат",
"image": "",
"visible": true,
"inlude_in_ml": true
}
}
]

@ -12,7 +12,7 @@ from service.models import Post_and_pvz, Post_and_pvzCategory, Post_and_pvzGroup
from service.models import PlacementPointPVZDistance, TaskStatus
from postamates.settings import DEBUG
from django.core.cache import cache
from service.layer_service import LayerService
class MyAdminSite(AdminSite):
@ -30,7 +30,12 @@ if DEBUG:
my_admin_site.register(PlacementPointPVZDistance)
my_admin_site.register(Post_and_pvz)
class Post_and_PVZAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
LayerService().count_post_pvz_for_placementpoint(obj)
my_admin_site.register(Post_and_pvz, Post_and_PVZAdmin)
my_admin_site.register(OtherObjects)
@ -58,7 +63,6 @@ class PlacementPointAdmin(admin.ModelAdmin):
pass
my_admin_site.register(TaskStatus, TaskStatusAdmin)
my_admin_site.register(Post_and_pvzGroup, GroupAdmin)
my_admin_site.register(OtherObjectsGroup, GroupAdmin)

@ -0,0 +1,25 @@
from django.contrib.gis.measure import Distance
from service import models
from postamates.settings import DEFAULT_PLACEMENT_POINT_UPDATE_RADIUS
class LayerService:
def count_post_pvz_for_placementpoint(self, obj):
points = models.PlacementPoint.objects.filter(geometry__distance_lt=(obj.wkt, Distance(
m=DEFAULT_PLACEMENT_POINT_UPDATE_RADIUS))).all()
for point in points:
LayerService.count_post_pvz(point)
@staticmethod
def get_post_and_pvz_categroies():
return models.Post_and_pvzCategory.objects.all(), models.Post_and_pvzGroup.objects.all()
@staticmethod
def count_post_pvz(point):
point.rivals_post_cnt = models.Post_and_pvz.objects.filter(
category__name="Постамат", inlude_in_ml=True,
wkt__distance_lt=(point.geometry, Distance(m=DEFAULT_PLACEMENT_POINT_UPDATE_RADIUS))).count()
point.rivals_pvz_cnt = models.Post_and_pvz.objects.filter(
category__name="ПВЗ", inlude_in_ml=True,
wkt__distance_lt=(point.geometry, Distance(m=DEFAULT_PLACEMENT_POINT_UPDATE_RADIUS))).count()
point.save()

@ -12,12 +12,6 @@ from service.tasks import raschet
from service.utils import create_columns_dist
class LayerService:
@staticmethod
def get_post_and_pvz_categroies():
return models.Post_and_pvzCategory.objects.all(), models.Post_and_pvzGroup.objects.all()
class PointService:
def update_fact(self, postamat_id: str, fact: int):

@ -23,6 +23,7 @@ from service.utils import log_to_telegram
import base64
from io import StringIO
from django.core.cache import cache
from service.layer_service import LayerService
@shared_task()
@ -359,6 +360,14 @@ def load_post_and_pvz(obj_id: int):
models.PlacementPointPVZDistance.objects.create(placement_point=point, pvz_postamates_group=group,
dist=post_object.distance.m)
status.status = "Подсчет расстояний завершен"
status.save()
point_qs = models.PlacementPoint.objects.all()
data_len = models.PlacementPoint.objects.count()
for _ind, point in enumerate(point_qs):
status.status = "Пересчет параметров точек: " + str(int(_ind / data_len * 100)) + "%"
status.save()
LayerService.count_post_pvz(point)
status.status = "Завершено"
cache.clear()
status.save()

Loading…
Cancel
Save