count_pvz_fix

dev
AlexP077 3 years ago
parent b1a2cd6552
commit c767e63f98

@ -6,6 +6,7 @@ from django.contrib.admin.sites import NotRegistered
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from service.layer_service import LayerService
from service.models import AO
from service.models import PlacementPoint
from service.models import Rayon
@ -15,6 +16,7 @@ from service.models import PlacementPointPVZDistance, TaskStatus
from postamates.settings import DEBUG
from django.core.cache import cache
from service.utils import run_psql_command
from service.tasks import start_pvz_group_count, start_pvz_category_count, raschet
class MyAdminSite(AdminSite):
@ -35,6 +37,8 @@ if DEBUG:
class Post_and_PVZAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.save()
LayerService().count_post_pvz_for_placementpoint(obj)
raschet.delay()
my_admin_site.register(Post_and_pvz, Post_and_PVZAdmin)
@ -58,6 +62,12 @@ class CategoryAdmin(admin.ModelAdmin):
class PostPvzCategoryAdmin(CategoryAdmin):
def save_model(self, request, obj, form, change):
obj.save()
start_pvz_category_count.delay(obj.id)
raschet.delay()
cache.clear()
def delete_model(self, request, obj):
if obj.id in (1, 2):
pass
@ -81,7 +91,10 @@ class PostPvzGroupAdmin(GroupAdmin):
def save_model(self, request, obj, form, change):
if not obj.pk:
run_psql_command()
super().save_model(request, obj, form, change)
obj.save()
start_pvz_group_count.delay(obj.id)
raschet.delay()
cache.clear()
class PlacementPointAdmin(admin.ModelAdmin):

@ -4,6 +4,7 @@ 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()
@ -16,10 +17,10 @@ class LayerService:
@staticmethod
def count_post_pvz(point):
point.rivals_post_cnt = models.Post_and_pvz.objects.filter(
point.rival_post_cnt = models.Post_and_pvz.objects.filter(
category__name="Постамат", include_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(
point.rival_pvz_cnt = models.Post_and_pvz.objects.filter(
category__name="ПВЗ", include_in_ml=True,
wkt__distance_lt=(point.geometry, Distance(m=DEFAULT_PLACEMENT_POINT_UPDATE_RADIUS))).count()
point.save()

@ -0,0 +1,16 @@
# Generated by Django 3.2 on 2023-08-31 12:07
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('service', '0027_postmlchecker'),
]
operations = [
migrations.DeleteModel(
name='PostMLChecker',
),
]

@ -3,7 +3,6 @@ from django.contrib.gis.db import models as gis_models
from django.db import models
from postamates.settings import SRID
from service.enums import PointStatus
from service.layer_service import LayerService
User._meta.get_field('email')._unique = True
@ -215,8 +214,3 @@ class LastMLCall(models.Model):
class TempFiles(models.Model):
data = models.TextField(blank=False, null=False)
class PostMLChecker(models.Model):
current = models.IntegerField(default=0,blank=False, null=False)
target = models.IntegerField(blank=False, null=False)

@ -1,12 +1,9 @@
from django.contrib.auth.models import Group
from rest_registration.signals import user_registered
from service.layer_service import LayerService
from service.models import Post_and_pvz, Post_and_pvzGroup, Post_and_pvzCategory, OtherObjects, OtherObjectsGroup, \
OtherObjectsCategory, PostMLChecker
from service.models import OtherObjects, OtherObjectsGroup, \
OtherObjectsCategory
from django.db.models.signals import post_save
from django.dispatch import receiver
from service.tasks import raschet
def user_created(sender, user, request, **kwargs):
@ -18,41 +15,6 @@ def user_created(sender, user, request, **kwargs):
user_registered.connect(user_created)
@receiver(post_save, sender=Post_and_pvz)
def post_pvz_handler(sender, instance, **kwargs):
LayerService().count_post_pvz_for_placementpoint(instance)
checker = PostMLChecker.objects.first()
if not checker:
raschet.delay()
else:
if checker.current >= checker.target - 1:
raschet.delay()
PostMLChecker.objects.all().delete()
else:
checker.current += 1
checker.save()
@receiver(post_save, sender=Post_and_pvzGroup)
def post_group_handler(sender, instance, **kwargs):
objects = Post_and_pvz.objects.filter(group=instance)
PostMLChecker.objects.create(target=objects.count())
for obj in objects:
obj.include_in_ml = instance.include_in_ml
obj.visible = instance.visible
obj.save()
@receiver(post_save, sender=Post_and_pvzCategory)
def post_category_handler(sender, instance, **kwargs):
objects = Post_and_pvzGroup.objects.filter(category=instance)
PostMLChecker.objects.create(target=Post_and_pvz.objects.filter(category=instance).count())
for obj in objects:
obj.include_in_ml = instance.include_in_ml
obj.visible = instance.visible
obj.save()
@receiver(post_save, sender=OtherObjectsGroup)
def other_group_handler(sender, instance, **kwargs):
OtherObjects.objects.filter(group=instance).update(visible=instance.visible)

@ -437,3 +437,24 @@ def load_data(obj_id: int):
status.status = "Загрузка данных завершена"
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()
objects = models.Post_and_pvz.objects.filter(group=instance)
objects.update(include_in_ml=instance.include_in_ml, visible=instance.visible)
for obj in objects:
LayerService().count_post_pvz_for_placementpoint(obj)
@shared_task()
def start_pvz_category_count(instance_id: int):
instance = models.Post_and_pvzCategory.objects.filter(id=instance_id).first()
groups = models.Post_and_pvzGroup.objects.filter(category=instance)
groups.update(include_in_ml=instance.include_in_ml, visible=instance.visible)
for gr in groups:
objects = models.Post_and_pvz.objects.filter(group=gr)
objects.update(include_in_ml=instance.include_in_ml, visible=instance.visible)
for obj in objects:
LayerService().count_post_pvz_for_placementpoint(obj)

Loading…
Cancel
Save