genslife

Uzman
Katılım
26 Şubat 2024
Mesajlar
11
Çözümler
1
Beğeniler
4
Yer
Diyarbakır
Merhaba,

C# ile Trendyol API sisteminden veri tabanımıza verileri çekiyoruz. Örneğin müşterinin vermiş olduğu bir siparişte 2 adet ürün bulunuyor. Veri tabanına gelen kayıt 2 satır olarak geliyor ve sipariş numaraları aynı olarak kaydoluyor. Veri tabanındaki tabloya yeni bir kolon açıp buraya örneğin siparişnumarası-1, siparişnumarası-2 olarak ekleme yapmam gerekiyor.
Aşağıda yer alan kod kısmında "BURAYA NE GELECEK" alanına nasıl bir for döngüsü ekleyebilirim?


Kod:
String query = "INSERT INTO Pazaryeri_Odemeler (ty_id,transactionDate,barcode,transactionType,receiptId,description,debt,credit,paymentPeriod,commissionRate,orderNumber,paymentOrderId,vadeTarihi,paymentDate,sellerId,Gonderi_Ucreti,Platform_Hizmet) " +
    "VALUES (@ty_id,@transactionDate,@barcode,@transactionType,@receiptId,@description,@debt,@credit,@paymentPeriod,@commissionRate,@orderNumber,@paymentOrderId,@vadeTarihi,@paymentDate,@sellerId,@Gonderi_Ucreti,@Platform_Hizmet)";

SqlCommand command = new SqlCommand(query, db_baglanti);
command.Parameters.AddWithValue("@ty_id", item.id);
command.Parameters.AddWithValue("@transactionDate", new DateTime(1970, 1, 1).AddTicks(long.Parse(item.transactionDate.ToString().TrimEnd()) * 10000));
command.Parameters.AddWithValue("@barcode", item.barcode);
command.Parameters.AddWithValue("@transactionType", item.transactionType);
command.Parameters.AddWithValue("@receiptId", item.receiptId == null ? "0" : item.receiptId);
command.Parameters.AddWithValue("@description", item.description);
command.Parameters.AddWithValue("@debt", item.debt);
command.Parameters.AddWithValue("@credit", item.credit);
command.Parameters.AddWithValue("@paymentPeriod", item.paymentPeriod);
command.Parameters.AddWithValue("@commissionRate", item.commissionRate);
command.Parameters.AddWithValue("@orderNumber", item.orderNumber);
command.Parameters.AddWithValue("@orderBenzersiz", "BURAYA NE GELECEK");
command.Parameters.AddWithValue("@paymentOrderId", item.paymentOrderId == null ? "0" : item.paymentOrderId);
command.Parameters.AddWithValue("@vadeTarihi", new DateTime(1970, 1, 1).AddTicks(long.Parse(item.paymentDate.ToString().TrimEnd()) * 10000));
command.Parameters.AddWithValue("@paymentDate", (int)odemeGunu.DayOfWeek == 0 ? odemeGunu.AddDays(1) : (int)odemeGunu.DayOfWeek == 1 ? odemeGunu.AddDays(3) : (int)odemeGunu.DayOfWeek == 2 ? odemeGunu.AddDays(2) : (int)odemeGunu.DayOfWeek == 3 ? odemeGunu.AddDays(1) : (int)odemeGunu.DayOfWeek == 4 ? odemeGunu.AddDays(4) : (int)odemeGunu.DayOfWeek == 5 ? odemeGunu.AddDays(3) : (int)odemeGunu.DayOfWeek == 6 ? odemeGunu.AddDays(2) : odemeGunu.AddDays(Math.Min(pazDif, perDif)));
command.Parameters.AddWithValue("@sellerId", item.sellerId);
command.Parameters.AddWithValue("@Gonderi_Ucreti", kargoucret);
command.Parameters.AddWithValue("@Platform_Hizmet", 4.19);
command.ExecuteNonQuery();
 
Son düzenleyen: Moderatör:
C#:
String query = "INSERT INTO Pazaryeri_Odemeler (ty_id,transactionDate,barcode,transactionType,receiptId,description,debt,credit,paymentPeriod,commissionRate,orderNumber,paymentOrderId,vadeTarihi,paymentDate,sellerId,Gonderi_Ucreti,Platform_Hizmet,orderBenzersiz) " +
    "VALUES (@ty_id,@transactionDate,@barcode,@transactionType,@receiptId,@description,@debt,@credit,@paymentPeriod,@commissionRate,@orderNumber,@paymentOrderId,@vadeTarihi,@paymentDate,@sellerId,@Gonderi_Ucreti,@Platform_Hizmet,@orderBenzersiz)";

SqlCommand command = new SqlCommand(query, db_baglanti);

foreach (var item in itemsFromAPI) // itemsFromAPI Trendyol API'den alınan siparişler
{
    // Her bir sipariş numarası için ürünlerin işlenmesi
    int index = 1;
    foreach (var itemGroup in item.GroupBy(i => i.orderNumber))
    {
        foreach (var subItem in itemGroup)
        {
            command.Parameters.Clear(); // :))

            command.Parameters.AddWithValue("@ty_id", subItem.id);
            command.Parameters.AddWithValue("@transactionDate", new DateTime(1970, 1, 1).AddTicks(long.Parse(subItem.transactionDate.ToString().TrimEnd()) * 10000));
            command.Parameters.AddWithValue("@barcode", subItem.barcode);
            command.Parameters.AddWithValue("@transactionType", subItem.transactionType);
            command.Parameters.AddWithValue("@receiptId", subItem.receiptId == null ? "0" : subItem.receiptId);
            command.Parameters.AddWithValue("@description", subItem.description);
            command.Parameters.AddWithValue("@debt", subItem.debt);
            command.Parameters.AddWithValue("@credit", subItem.credit);
            command.Parameters.AddWithValue("@paymentPeriod", subItem.paymentPeriod);
            command.Parameters.AddWithValue("@commissionRate", subItem.commissionRate);
            command.Parameters.AddWithValue("@orderNumber", subItem.orderNumber);
            command.Parameters.AddWithValue("@paymentOrderId", subItem.paymentOrderId == null ? "0" : subItem.paymentOrderId);
            command.Parameters.AddWithValue("@vadeTarihi", new DateTime(1970, 1, 1).AddTicks(long.Parse(subItem.paymentDate.ToString().TrimEnd()) * 10000));
            command.Parameters.AddWithValue("@paymentDate", (int)odemeGunu.DayOfWeek == 0 ? odemeGunu.AddDays(1) : (int)odemeGunu.DayOfWeek == 1 ? odemeGunu.AddDays(3) : (int)odemeGunu.DayOfWeek == 2 ? odemeGunu.AddDays(2) : (int)odemeGunu.DayOfWeek == 3 ? odemeGunu.AddDays(1) : (int)odemeGunu.DayOfWeek == 4 ? odemeGunu.AddDays(4) : (int)odemeGunu.DayOfWeek == 5 ? odemeGunu.AddDays(3) : (int)odemeGunu.DayOfWeek == 6 ? odemeGunu.AddDays(2) : odemeGunu.AddDays(Math.Min(pazDif, perDif)));
            command.Parameters.AddWithValue("@sellerId", subItem.sellerId);
            command.Parameters.AddWithValue("@Gonderi_Ucreti", kargoucret);
            command.Parameters.AddWithValue("@Platform_Hizmet", 4.19);
            command.Parameters.AddWithValue("@orderBenzersiz", $"{subItem.orderNumber}-{index}");

            command.ExecuteNonQuery();

            index++;
        }
    }
}

Yukarıdaki kodda, sipariş numarasına göre gruplandırılmış siparişler üzerinde dönen bir dış foreach döngüsü var. İçteki foreach döngüsü ise her bir siparişteki ürünlerin işlenmesini sağlıyor. index değişkeni, sipariş içindeki ürünlerin sırasını belirlemek için kullanıyor ve orderBenzersiz sütununa ekliyor. Bu sayede her ürün için benzersiz bir değer elde ediliyor.
 
@uintptr Cevabınız için teşekkürler.

Verdiğiniz cevap sorduğum soruya göre mantıklı fakat ben konuyu biraz farklı anlatmış olabilirim. Kısa ve anlaşılır olarak tekrar yazayım uygun olursanız cevaplarsınız.

Trendyol satıcı panelinde siparişler ekranında sipariş paketi bölme diye bir özellik var. Bu özelliğin kullanım amacı sipariş içerisinde 1'den fazla ürün mevcut ise ve bu ürünler tek koli ile gönderilemiyor ise iki veya daha fazla kaç koli yapılması gerekiyor ise sipariş bölme işlemi kullanılır ve her bir koli için tekrar kargo barkodu oluşturur. Bu siparişler bölünürken sipariş numaraları aynı kalır sadece paket numaraları değişir. Burada böldüğümüz sipariş API kısmına her biri ayrı satır olarak geliyor hepsinin sipariş numarası aynı. Paket bölme yapılan siparişlerde her bir pakete ayrı kargo ücreti yansır.

Bir de müşterinin verdiği siparişte birden fazla ürün olduğu ama paket bölmeye gerek olmayan siparişler mevcut. Bu siparişte API ye sipariş içerisindeki ürün adeti kadar geliyor.

Bu iki yöntemde de gelen APIden gelen siparişler her biri ayrı satır olarak geldiği için ben bilemiyorum hangisinin paket bölmesi, hangisinin tek kargo olduğunu API de bunu belirten hiçbir bilgi mevcut değil. Dolayısı ile kargo tutarını hesaplayamıyorum. Paket bölme olanın her birine ayrı ayrı hesaplayıp, bölme olmayanı birden fazla satır olmasına rağmen tek kargo olarak hesaplamam gerekiyor.

Bir de APIden çektiğim ayrı bir veri alanı var. Burada paket bölünenler ayrı satır ama sipariş içerisinde biden fazla ürün olanlar tek satır olarak geliyor. Bu iki tabloyu kullanarak hangisinin paket bölme hangisinin normal olduğunu ayırabilir miyiz?

Açıkçası bu şekilde karmaşık gibi görünen bir problem mevcut.
 
Son düzenleyen: Moderatör: