Poligon Yapısı
Polygon yapısı ile beraber siparişlerin doğru depolara aktarılması ve yeni kullanıcıların hizmet bölgesinin eşleştirilmesi hedeflenmiştir. Elogii tarafında oluşturulan bölgeler alınarak her bir depo için multipolygon yapısı oluşturulmuştur.
Elogii'de Oluşturulan Bölgelerin Tarafımızda Kaydedilmesi
Elogii'de oluşturulan bölgelerin koordinatlarıyla beraber tutulabilmesi için
MySQL polygon yapısı kullanılmıştır. Yeni bir tablo üzerinde her bir bölgenin
uid'si ile beraber depo id'si ve polygon'u yer almaktadır. Yeni tablonun ismi
Biri_Distributor_Elogii_Zone_Map olarak isimlendirilmiş olup sütunları şu şekildedir:
elogiiZoneUID (varchar(20)): Elogii tarafından gelen uid
elogiiZoneId (varchar(50)): Elogii tarafından gelen id
biriDistributorId(int): Bölgeyi eşlediğimiz deponun id'si
polygon (polygon): Bölgeye ait koordinatlar
active (tinyInt(1)): Aktiflik durumu
dateCreated (datetime): Oluşturulduğu zaman
İlk olarak gelen bölgelerin son işlemden beri silinip silinmediği kontrol edilerek aktif/inaktif durumu ayarlanmaktadır. Gelen her bir bölge için class yapısıyla beraber validasyon işlemi yapılmaktadır. Daha sonra gelen her bölge için kayıt işlemi yapılır. Eğer daha önce kayıt edilmişse depo id'si ve koordinatları güncellenir.
Bu kısımda depo Elogii tarafında bölge ile beraber seçilemediği için her bir
bölgeye verilen isimden depo id'sine ulaşılmaktadır. depoId_DepoName-1
Örnek isimlendirme: 4_Bostancı-1
Buradaki servis cron ile aşağıdaki endpointe istek atarak sağlanıyor:
Endpoint: https://www.bisu.com.tr/api/v2/elogii/zones
Kaydedilen Bölgelerin Multipolygon Formatında Depo Bazlı Kaydedilmesi
Buradaki serviste öncelikle yeni tablomuza kaydedilen bölgeler depo id'leri ile beraber aktiflik durumuna göre çekilmektedir. Çekilen bölgeler depo bazında multipolygon class formatında uygun hale getirilmektedir. Burada birden fazla bölge olması durumunda koordinatlar birleştirilmektedir. Bu şekilde bir multipolygon yapısı oluşturuluyor ve Biri_Distributor tablosunda yeni sütun olan multiPolygon kısmına kaydedilmiş oluyor.
Buradaki servis cron ile aşağıdaki endpointe istek atarak sağlanıyor:
Endpoint: https://www.bisu.com.tr/api/v2/int/biri/distributor/save-multi-polygons
Gelen Sipariş Datasında Multipolygon Yapısına Göre Depoyu Seçme
Burada bulunan servis order.save kısmından çağrılmaktadır. Burada adres datasına lokasyon bazında bakılarak depo seçiliyordu. Artık depoların multipolygonlarına bakarak hangisini seçmesi gerektiğine karar veriyor olacaktır. Eğer multipolygonların herhangi birinde bulunmuyorsa lokasyon bazında bulunan seçilecek ve buna uygun olarak data dönülecektir.
Yeni Kullanıcı Hizmet Bölgesinin Belirlenmesi
Biri vendor’ının alındığı kısmın(getBiriVendor servisi) düzenlenmesi için isGuest parametresi yerleştirilmiştir. Bu şekilde eğer geçici subscriber geliyorsa lokasyona bağlı depo id’sinin çekilmesi, eğer subscriber olarak geliyorsa polygon’a bağlı depo id’sinin çekilmesi sağlanmıştır.
| Ek Bilgiler | Açıklama |
|---|---|
| İlgili JIRA kart(lar)ı | CORE-1382 |