|
|
|
@ -40,13 +40,13 @@ class PointService:
|
|
|
|
req_url = f"https://geocode.search.hereapi.com/v1/geocode?q={addr}&apiKey={GEOCODER_API_KEY}"
|
|
|
|
req_url = f"https://geocode.search.hereapi.com/v1/geocode?q={addr}&apiKey={GEOCODER_API_KEY}"
|
|
|
|
response = requests.get(req_url).json().get('items')
|
|
|
|
response = requests.get(req_url).json().get('items')
|
|
|
|
if not response:
|
|
|
|
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)
|
|
|
|
status=PointStatus.Pending.name)
|
|
|
|
problem += 1
|
|
|
|
problem += 1
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
coords = response[0].get('position')
|
|
|
|
coords = response[0].get('position')
|
|
|
|
if not coords:
|
|
|
|
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)
|
|
|
|
status=PointStatus.Pending.name)
|
|
|
|
problem += 1
|
|
|
|
problem += 1
|
|
|
|
continue
|
|
|
|
continue
|
|
|
|
@ -64,8 +64,19 @@ class PointService:
|
|
|
|
for o in objs:
|
|
|
|
for o in objs:
|
|
|
|
distances = models.PlacementPointPVZDistance.objects.filter(placement_point=o.get('id')).all()
|
|
|
|
distances = models.PlacementPointPVZDistance.objects.filter(placement_point=o.get('id')).all()
|
|
|
|
o.pop('id')
|
|
|
|
o.pop('id')
|
|
|
|
pre_obj, _ = models.PrePlacementPoint.objects.get_or_create(
|
|
|
|
street = o.pop('street')
|
|
|
|
**{**o, "matching_status": MatchingStatus.Matched.name})
|
|
|
|
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:
|
|
|
|
for d in distances:
|
|
|
|
models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj,
|
|
|
|
models.PrePlacementPointPVZDistance.objects.get_or_create(placement_point=pre_obj,
|
|
|
|
pvz_postamates_group=d.pvz_postamates_group,
|
|
|
|
pvz_postamates_group=d.pvz_postamates_group,
|
|
|
|
@ -73,8 +84,9 @@ class PointService:
|
|
|
|
|
|
|
|
|
|
|
|
matched += 1
|
|
|
|
matched += 1
|
|
|
|
elif not rayon:
|
|
|
|
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'),
|
|
|
|
house_number=response.get('houseNumber'),
|
|
|
|
|
|
|
|
address=addr,
|
|
|
|
subject_rf=response.get('state'),
|
|
|
|
subject_rf=response.get('state'),
|
|
|
|
city=response.get('city'),
|
|
|
|
city=response.get('city'),
|
|
|
|
category=cat, geometry=wkt, sample_trn=False,
|
|
|
|
category=cat, geometry=wkt, sample_trn=False,
|
|
|
|
@ -82,28 +94,29 @@ class PointService:
|
|
|
|
matching_status=MatchingStatus.Error.name,
|
|
|
|
matching_status=MatchingStatus.Error.name,
|
|
|
|
status=PointStatus.Pending.name)
|
|
|
|
status=PointStatus.Pending.name)
|
|
|
|
problem += 1
|
|
|
|
problem += 1
|
|
|
|
elif cat == 'Подъезд жилого дома':
|
|
|
|
elif cat == 'Подъезд жилого дома' and models.House.objects.filter(street=response.get('street'),
|
|
|
|
houses = models.House.objects.filter(street=response.get('street'),
|
|
|
|
house_number=response.get(
|
|
|
|
house_number=response.get('houseNumber')).values().all()
|
|
|
|
'houseNumber')).first():
|
|
|
|
for house in houses:
|
|
|
|
house = models.House.objects.filter(street=response.get('street'),
|
|
|
|
house.pop('id')
|
|
|
|
house_number=response.get('houseNumber')).values().first()
|
|
|
|
if house.get('doors') and house.get('doors') != 0:
|
|
|
|
house.pop('id')
|
|
|
|
house['flat_cnt'] = int(house['flat_cnt'] / house['doors'])
|
|
|
|
if house.get('doors') and house.get('doors') > 1:
|
|
|
|
for _num in range(house['doors']):
|
|
|
|
house['flat_cnt'] = int(house['flat_cnt'] / house['doors'])
|
|
|
|
models.PrePlacementPoint.objects.get_or_create(**house, address=addr,
|
|
|
|
for _num in range(house['doors']):
|
|
|
|
name=f'Подъезд {_num + 1}',
|
|
|
|
models.PrePlacementPoint.objects.get_or_create(address=addr,
|
|
|
|
matching_status=MatchingStatus.New.name,
|
|
|
|
name=f'Подъезд {_num + 1}',
|
|
|
|
sample_trn=False,
|
|
|
|
|
|
|
|
is_vis=True, 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,
|
|
|
|
matching_status=MatchingStatus.New.name,
|
|
|
|
sample_trn=False,
|
|
|
|
sample_trn=False,
|
|
|
|
is_vis=True, geometry=wkt,
|
|
|
|
is_vis=True, category=cat, geometry=wkt,
|
|
|
|
status=PointStatus.Pending.name, area=rayon,
|
|
|
|
status=PointStatus.Pending.name, area=rayon,
|
|
|
|
district=rayon.AO)
|
|
|
|
district=rayon.AO, defaults=house)
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
models.PrePlacementPoint.objects.get_or_create(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, defaults=house)
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
models.PrePlacementPoint.objects.get_or_create(address=addr, street=response.get('street'),
|
|
|
|
models.PrePlacementPoint.objects.get_or_create(address=addr, street=response.get('street'),
|
|
|
|
house_number=response.get('houseNumber'),
|
|
|
|
house_number=response.get('houseNumber'),
|
|
|
|
|