From d2f18a78fb800a822f11d3a88c6b7379a0f2d149 Mon Sep 17 00:00:00 2001 From: Timofey Malinin Date: Mon, 2 Oct 2023 17:09:29 +0000 Subject: [PATCH 1/5] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index df87d95..ce74ad2 100644 --- a/README.md +++ b/README.md @@ -105,4 +105,6 @@ server { return 404; } + + ``` From 4a22ba1ec0c1ac8d96f0f15c461d615c0a135cd9 Mon Sep 17 00:00:00 2001 From: AlexP077 Date: Tue, 3 Oct 2023 16:32:03 +0300 Subject: [PATCH 2/5] fix_load --- service/service.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/service/service.py b/service/service.py index 83a9cd0..5f6fa74 100644 --- a/service/service.py +++ b/service/service.py @@ -94,14 +94,14 @@ class PointService: name=f'Подъезд {_num + 1}', matching_status=MatchingStatus.New.name, sample_trn=False, - is_vis=True, geometry=wkt, + is_vis=True,category=cat, geometry=wkt, status=PointStatus.Pending.name, area=rayon, district=rayon.AO) else: models.PrePlacementPoint.objects.get_or_create(**house, address=addr, matching_status=MatchingStatus.New.name, sample_trn=False, - is_vis=True, geometry=wkt, + is_vis=True,category=cat, geometry=wkt, status=PointStatus.Pending.name, area=rayon, district=rayon.AO) else: From 85d054fcf21508960c662a99420c8d8a17bd091d Mon Sep 17 00:00:00 2001 From: AlexP077 Date: Tue, 3 Oct 2023 17:30:06 +0300 Subject: [PATCH 3/5] fix_load --- service/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/service.py b/service/service.py index 5f6fa74..1b4a88f 100644 --- a/service/service.py +++ b/service/service.py @@ -87,7 +87,7 @@ class PointService: house_number=response.get('houseNumber')).values().all() for house in houses: house.pop('id') - if house.get('doors') and house.get('doors') != 0: + if house.get('doors') and house.get('doors') > 1: house['flat_cnt'] = int(house['flat_cnt'] / house['doors']) for _num in range(house['doors']): models.PrePlacementPoint.objects.get_or_create(**house, address=addr, From 0e530b792723a16df2ca1ad09bd1303e37aff734 Mon Sep 17 00:00:00 2001 From: AlexP077 Date: Tue, 3 Oct 2023 18:50:11 +0300 Subject: [PATCH 4/5] fix_point_add --- service/service.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/service/service.py b/service/service.py index 1b4a88f..9d8a511 100644 --- a/service/service.py +++ b/service/service.py @@ -82,28 +82,28 @@ class PointService: matching_status=MatchingStatus.Error.name, status=PointStatus.Pending.name) problem += 1 - elif cat == 'Подъезд жилого дома': - houses = models.House.objects.filter(street=response.get('street'), - house_number=response.get('houseNumber')).values().all() - for house in houses: - house.pop('id') - if house.get('doors') and house.get('doors') > 1: - house['flat_cnt'] = int(house['flat_cnt'] / house['doors']) - for _num in range(house['doors']): - models.PrePlacementPoint.objects.get_or_create(**house, address=addr, - name=f'Подъезд {_num + 1}', - matching_status=MatchingStatus.New.name, - sample_trn=False, - is_vis=True,category=cat, geometry=wkt, - status=PointStatus.Pending.name, area=rayon, - district=rayon.AO) - else: + elif cat == 'Подъезд жилого дома' and models.House.objects.filter(street=response.get('street'), + house_number=response.get('houseNumber')).first(): + house = models.House.objects.filter(street=response.get('street'), + house_number=response.get('houseNumber')).values().first() + house.pop('id') + if house.get('doors') and house.get('doors') > 1: + house['flat_cnt'] = int(house['flat_cnt'] / house['doors']) + for _num in range(house['doors']): models.PrePlacementPoint.objects.get_or_create(**house, address=addr, + name=f'Подъезд {_num + 1}', matching_status=MatchingStatus.New.name, sample_trn=False, is_vis=True,category=cat, geometry=wkt, status=PointStatus.Pending.name, area=rayon, district=rayon.AO) + else: + models.PrePlacementPoint.objects.get_or_create(**house, address=addr, + matching_status=MatchingStatus.New.name, + sample_trn=False, + is_vis=True,category=cat, geometry=wkt, + status=PointStatus.Pending.name, area=rayon, + district=rayon.AO) else: models.PrePlacementPoint.objects.get_or_create(address=addr, street=response.get('street'), house_number=response.get('houseNumber'), From 0d3916948ec5c0bb38d0f5e44d0f43fa92fd8fad Mon Sep 17 00:00:00 2001 From: AlexP077 Date: Tue, 3 Oct 2023 20:21:02 +0300 Subject: [PATCH 5/5] fix_get_or_create --- service/service.py | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/service/service.py b/service/service.py index 9d8a511..2dd18a7 100644 --- a/service/service.py +++ b/service/service.py @@ -40,13 +40,13 @@ class PointService: req_url = f"https://geocode.search.hereapi.com/v1/geocode?q={addr}&apiKey={GEOCODER_API_KEY}" response = requests.get(req_url).json().get('items') if not response: - models.PrePlacementPoint.objects.create(address=addr, matching_status=MatchingStatus.Error.name, + models.PrePlacementPoint.objects.get_or_create(address=addr, matching_status=MatchingStatus.Error.name, status=PointStatus.Pending.name) problem += 1 continue coords = response[0].get('position') if not coords: - models.PrePlacementPoint.objects.create(address=addr, matching_status=MatchingStatus.Error.name, + models.PrePlacementPoint.objects.get_or_create(address=addr, matching_status=MatchingStatus.Error.name, status=PointStatus.Pending.name) problem += 1 continue @@ -64,8 +64,19 @@ class PointService: for o in objs: distances = models.PlacementPointPVZDistance.objects.filter(placement_point=o.get('id')).all() o.pop('id') - pre_obj, _ = models.PrePlacementPoint.objects.get_or_create( - **{**o, "matching_status": MatchingStatus.Matched.name}) + street = o.pop('street') + house_number = o.pop('house_number') + if o.get('name'): + name = o.pop('name') + pre_obj, _ = models.PrePlacementPoint.objects.get_or_create(street=street, + house_number=house_number,name=name, + matching_status=MatchingStatus.Matched.name, + defaults=o) + else: + pre_obj, _ = models.PrePlacementPoint.objects.get_or_create(street=street, + house_number=house_number, + matching_status=MatchingStatus.Matched.name, + defaults=o) for d in distances: models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj, pvz_postamates_group=d.pvz_postamates_group, @@ -73,8 +84,9 @@ class PointService: matched += 1 elif not rayon: - models.PrePlacementPoint.objects.get_or_create(address=addr, street=response.get('street'), + models.PrePlacementPoint.objects.get_or_create(street=response.get('street'), house_number=response.get('houseNumber'), + address=addr, subject_rf=response.get('state'), city=response.get('city'), category=cat, geometry=wkt, sample_trn=False, @@ -83,27 +95,28 @@ class PointService: status=PointStatus.Pending.name) problem += 1 elif cat == 'Подъезд жилого дома' and models.House.objects.filter(street=response.get('street'), - house_number=response.get('houseNumber')).first(): + house_number=response.get( + 'houseNumber')).first(): house = models.House.objects.filter(street=response.get('street'), - house_number=response.get('houseNumber')).values().first() + house_number=response.get('houseNumber')).values().first() house.pop('id') if house.get('doors') and house.get('doors') > 1: house['flat_cnt'] = int(house['flat_cnt'] / house['doors']) for _num in range(house['doors']): - models.PrePlacementPoint.objects.get_or_create(**house, address=addr, + models.PrePlacementPoint.objects.get_or_create(address=addr, name=f'Подъезд {_num + 1}', matching_status=MatchingStatus.New.name, sample_trn=False, - is_vis=True,category=cat, geometry=wkt, + is_vis=True, category=cat, geometry=wkt, status=PointStatus.Pending.name, area=rayon, - district=rayon.AO) + district=rayon.AO, defaults=house) else: - models.PrePlacementPoint.objects.get_or_create(**house, address=addr, + models.PrePlacementPoint.objects.get_or_create(address=addr, matching_status=MatchingStatus.New.name, sample_trn=False, - is_vis=True,category=cat, geometry=wkt, + is_vis=True, category=cat, geometry=wkt, status=PointStatus.Pending.name, area=rayon, - district=rayon.AO) + district=rayon.AO, defaults=house) else: models.PrePlacementPoint.objects.get_or_create(address=addr, street=response.get('street'), house_number=response.get('houseNumber'),